본문 바로가기

전체 글252

[알고리즘] 이분 탐색(Binary Search) 1. 이분 탐색 - 정렬된 배열에서 찾고자 하는 수를 찾는 방법 - 계속해서 두가지 경우로 나누면서 탐색 - 인덱스를 이용해 탐색 - 시간복잡도 : O(logN) 2. 탐색 방법 1. 배열의 첫번째 인덱스와 마지막 인덱스 번호를 각각 left, right로 저장 2. left와 right의 중간지점인 mid의 인덱스를 (left+right)/2 를 이용해 구함 3. left가 right보다 커지는 시점까지 반복 -> left보다 right가 커지면 찾고자 하는 수가 없는 경우임 4. 배열의 mid번째 값과 내가 찾고자 하는 값을 비교 4-1. 내가 찾고자 하는 값이 mid보다 작은 경우 - 최소한 mid - 1번째 인덱스의 값보다는 작거나 같기 때문에 right를 mid-1로 변경시켜 최대값을 바꿔줌(구.. 2023. 10. 18.
[프로그래머스][C++] 대충 만든 자판 #include #include #include using namespace std; vector solution(vector keymap, vector targets) { vector answer; map key; // 키맵을 돌면서 각 단어별 찾아야되는 횟수를 미리 파악 for(int i = 0; i 최소 횟수로 변경 if(key[curWord] ==.. 2023. 10. 18.
[프로그래머스][C++] 조건에 맞게 수열 변환하기 2 #include #include #include using namespace std; int solution(vector arr) { int x = 0; while(true) { vector prevArr = arr; // 이전 배열 for(int i = 0; i = 50 && arr[i] % 2 == 0) { // 50보다 크거나 같고, 짝수인 경우 arr[i] /= 2; } else if(arr[i] < 50 && arr[i] % 2 == 1) { // 50보다 작고, 홀수인 경우 arr[i] = arr[i] * 2 + 1; } } // 정렬 sort(prevArr.begin(), prevArr.end()); sort(arr.begin(), a.. 2023. 10. 18.
[프로그래머스][C++] 달리기 경주 #include #include #include using namespace std; vector solution(vector players, vector callings) { map playersRank; for(int i = 0; i < players.size(); i++) { playersRank[players[i]] = i; } for(int i = 0; i < callings.size(); i++) { // 현재 플레이어 등수 int curPlayerRank = playersRank[callings[i]]; playersRank[players[curPlayerRank]]--; // 현재 플레이어 순위 상승 playersRank[players[curPlayerRank - 1]]++; // 추월당한.. 2023. 10. 17.
[C++] char형에서 int형으로 형 변환 오늘 오랜만에 프로그래머스 문제를 풀다가 char형을 int형으로 형 변환시키는 것에서 순간 막혔다. string형은 int형으로 바꾸려면 stoi를 사용하면 되는데 char형은 뭘로 바꿔야 하지? 하다가 stoi랑 같이 나오는 atoi가 const char * 를 인수로 받길래 이거구나 싶어서 해봤는데 잘 되지 않았다. 그래서 검색해서 찾아보았고, 알고보니 쉬웠다. char형은 아스키코드이기 때문에 현재 char에서 '0'의 아스키코드 값을 빼주어 구할 수 있었다. char c = '5'; int i = c - '0'; cout 2023. 10. 17.
[프로그래머스][C++] 뒤에서 5등까지 #include #include #include using namespace std; vector solution(vector num_list) { vector answer; for(int i = 0; i num_list[j]) { curMin = num_list[j]; minIndex = j; } } answer.push_back(curMin); swap(num_list[i], num_list[minIndex]); } return answer; } 1. 가장 작은 5개의 수를 구해야 하므로 .. 2023. 10. 17.
[프로그래머스][C++] 숫자 짝꿍 #include #include using namespace std; string solution(string X, string Y) { string answer = ""; // 0~9 까지의 갯수를 담을 벡터 vector Xcount(10); vector Ycount(10); // X의 각 숫자들의 갯수를 셈 for(int i = 0; i int로 변환 Xcount[lastNum]++; } // Y의 각 숫자들의 갯수를 셈 for(int i = 0; i .. 2023. 10. 17.
[프로그래머스][C++] 조건에 맞게 수열 변환하기 3 #include #include using namespace std; vector solution(vector arr, int k) { if(k % 2 == 0) { // k가 짝수 for(int i = 0; i < arr.size(); i++) { arr[i] += k; } } else { // k가 홀수 for(int i = 0; i < arr.size(); i++) { arr[i] *= k; } } return arr; } 1. k를 2로 나눈 나머지 값을 이용해 짝수인지 홀수인지 판단한다. 2. 짝수라면 주어진 arr를 반복하며 각 원소에 k만큼 더해준다. 3. 홀수라면 주어진 arr를 반복하며 각 원소에 k만큼 곱해준다. 4. arr를 리턴해준다. 어렵지 않게 금방 풀었다. 2023. 10. 16.
[프로그래머스][C++] 키패드 누르기 #include #include using namespace std; string solution(vector numbers, string hand) { string answer = ""; // 각 손의 초기 위치 int curLeft = 10; // * int curRight = 12; // # for(int i = 0; i < numbers.size(); i++) { // 0은 위치상 11로 간주 int curNum = numbers[i] == 0 ? 11 : numbers[i]; if(curNum % 3 == 1) { // 1, 4, 7 answer += "L"; curLeft = curNum; } else if(curNum % 3 == 0) { // 3, 6, 9 answer += "R"; cur.. 2023. 10. 16.
[프로그래머스][C++] 공백으로 구분하기 1 #include #include using namespace std; vector solution(string my_string) { vector answer; string curStr = ""; for(int i = 0 ; i < my_string.size(); i++) { if(my_string[i] == ' ') { answer.push_back(curStr); curStr = ""; } else { curStr += my_string[i]; } } answer.push_back(curStr); return answer; } 1. 각 단어들을 담을 curStr 선언 2. 문자열을 반복하면서 공백이 나오는지 체크 3. 공백이 나오지 않았다면 curStr에 현재 문자를 추가 4. 공백이 나왔다면 지금껏.. 2023. 10. 16.
[자기계발][글쓰기] 남은 2023년 동안의 목표(D-75) 1부 나는 사회초년생이다. 그러다보니 앞으로 어떻게 살아나가야될지, 저축이나 투자는 어떻게 해야되고, 어떤 자기계발을 어떻게 잘 해야되는지 등의 걱정거리가 많은 요즘이다. 그래서 최근에 '역행자'를 시작으로 책도 꾸준히 읽으려고 노력하고 있고, 원래하던 운동도 열심히 하고 있지만 그 외에 추가적으로 배우고 싶은 것들과 배워야만 할 것들이 너무 많아서 뭐부터 어떻게 해나가야 될지 걱정이 된다. 그래서 일단 작성일(10/15) 기준 2023년이 75일 남았는데 남은 기간동안의 목표를 써내려가려 한다. 1. 꾸준한 운동 나는 운동을 좋아하는 편이다. 사실 돈과 시간만 된다면 배우고 싶은 운동이 너무 많다. 지금까지 축구, 야구, 탁구, 배드민턴, 농구, 주짓수, 클라이밍, 헬스 등등 여러 운동을 배우고 접했다. 그.. 2023. 10. 15.
[UML] 타이밍 다이어그램(Timing Diagram) - 시간에 따른 각 객체의 상태와 그 상태를 변경시키는 방아쇠 역할을 하는 메시지들을 보여주는 도표 - 순차 다이어그램과 상태 머신 다이어그램을 합쳐 놓은 것과 같다. - 각 신호들이 시간별로 처리되는 과정을 그림으로 나타낸 것 - 신호의 동작을 정확한 타이밍에 맞춰 이뤄지게 하여 발생할 수 있는 충돌이나 간섭을 방지할 수 있음 1) 시간축 - 시간의 흐름을 나타내는 수평선 2) 신호 - 수직선으로 표시되고 상태 변화에 따라 높은 레벨과 낮은 레벨로 표시됨 3) 클럭 - 시스템의 타이밍 신호로 주기적으로 반복되는 신호로 표시됨 - 시스템의 동작을 동기화함 4) 지연 - 신호의 전달이나 처리에 소요되는 시간을 나타냄 5) 상태 전이 - 신호의 상태 변화를 표현 2023. 10. 13.