프로그래머스44 [프로그래머스 Level_1 / C++ / 카카오] 키패드 누르기 #접근방법 1. ( '*' ,'0', '#' ) -> (10, 11, 12) 로 치환 2. 1, 4, 7 일 때 왼손 위치 해당 값으로 이동, 3, 6, 9 일 때 오른손 위치 해당값으로 이동 3. 2, 5, 8, 11 일 때 왼손과 오른손의 위치를 중간열로 이동 (이동할때 카운트 +1, 이미 가운데에 위치했을 경우 변화 x 4. 왼손과 오른손이 위치한 숫자 값에서 가려고 하는 숫자값의 차이의 절댓값 구하기 5. 절댓값이 더 작은 값이 나온 손에 위치 저장. 같을 경우 hand 변수에서 어떤 손잡이인지 확인하고 해당 손에 위치 저장. #include #include #include using namespace std; int temp_l, temp_r, l_cnt, r_cnt; string solutio.. 프로그래머스/Level_1 2022. 2. 18. [프로그래머스 Level_2 / C++ / 카카오] 방금그곡 문제를 봤을 때 역시나 카카오는 문자열을 예쁘게(?) 준다. #접근방법 (1) 먼저 m 의 문자열은 12개의 문자열을 나타낸다. 여기서 중요한 점은 'C#' 또한 하나의 음이라는 것이다. 그렇기 때문에 본인은 '#'을 우측에 두고 있는 알파벳에다가 +10 정도를 해주면서 다른 알파벳으로 나타냈다. 즉, 'C' 는 아스키코드로 67 이기 때문에 +10 을 해주면 'M'으로 치환된다. "CC#BCC#BCC#BCC#BCC#B" -> "CMBCMBCMBCMBCMBCMB" (2) 인덱스로 문자열 자르기 문자열을 처리하기 위해서 정말 많이 쓰이는 함수이다. 이 함수는 어떠한 문자열의 특정 인덱스에서 어떠한 인덱스까지 사이의 새로운 문자열을 만들때 보통 사용된다. 예를 들어, "abcdefe" 라는 baebalja... 프로그래머스/Level_2 2022. 2. 17. [프로그래머스 Level_3 / C++ / 카카오] 보석 쇼핑 투포인터를 활용해서 풀었다. 1. 먼저 본인은 문자열을 상당히 싫어하기 때문에 unordered_map 을 활용해서 문자열을 모두 숫자로 변경하였다. - 즉, 위의 예제에서 나오는 보석이름을 숫자로 변경해서 v라는 벡터에 저장하였다. gams {"DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"} => v { 1, 2, 2, 1, 1, 3, 4, 1 } 2. START, END 변수를 생성하여 벡터의 인덱스 번호를 저장 시킨 후, 문자열 종류의 개수에 도달하지 않았다면 END변수를 계속해서 증가 시켜준다. ( 위의 예제에서 문자열 종류의 개수는 4개이다. ) 이때, 방문했던 값을 인덱스로 가진 check 라는 벡터에 개수를 하나씩 증가시켜.. 프로그래머스/Level_3 2022. 2. 10. [Level_2 / C++ / 카카오] 괄호 변환 문제를 잘 이해하고 재귀 및 stack을 잘 활용해야한다. 이 문제는 어떻게 괄호를 변환하는지 설명이 잘 되어있다. 그렇기 때문에 문제를 차근차근 읽어보고 재귀가 어떻게 돌아갈지 이해하도록 노력해야 한다. 다음 입출력 예제를 통해서 문제에서 설명한대로 괄호를 변환해서 만들어보면 어떻게 하라는건지 이해될거다. 실수할 수 있는 부분은 4-4 괄호 방향을 뒤집으라는 것이지 순서를 바꾸라는 것이 아니다 #include #include #include #include #include using namespace std; string answer = ""; string split (string s){ if(!s.size())return s; vector x(2,0); int index =0; for(int i=0; i 프로그래머스/Level_2 2022. 1. 29. [Level_2 / C++ / 카카오] 메뉴 리뉴얼 모든 경우의 수 정렬 벡터를 정렬할 때 정렬 될 수 있는 모든 경우의 수를 물어보는 문제가 있다. 이러한 경우 해당 함수를 사용한다. 즉, A B C 를 정렬하고 싶은데 모든 경우를 정렬하면, ABC ACB BAC BCA CAB CBA 순으로 정 baebalja.tistory.com 1. course 사이즈 만큼 for문 돌리기 2. 각 손님이 주문한 메뉴가 course 사이즈보다 작으면 continue; 3. next_permutation 사용해서 변화되는 인덱스 값들에 해당하는 문자들로 문자열을 만들고 map에 저장 4. next_permutation 종료된 후 제일 큰 값을 갖는 key값을 answer에 push_back; 5. 알파벳 오름차순으로 정렬 #include #include #includ.. 프로그래머스/Level_2 2022. 1. 28. [Level_2 / C++ / 카카오] k진수에서 소수 개수 구하기 1. 10진수로 주어진 숫자를 k진수로 변환후 문자열로 저장 2. 소수를 담을 long long 타입의 벡터 생성 후 문자열에서 숫자에 해당되는 부분들을 담기. 3. 소수인지 아닌지 판단하는 함수 호출 "2 ~ 루트(n)" 에 해당하는 값으로 n을 나눈다. 나누어진다면 false 반환 그렇지 않다면 true 반환 소수 판별법, 왜 루트 N 이하의 수만 나눠보면 되는 것일까? 에라토스테네스의 체 라는 개념을 읽어보면 n이 소수인지 아닌지 판별하기 위해서는 sqrt(n) 이하의 수만 나눠보면 된다고 한다. (sqrt는 루트를 의미함) 근데 왜 sqrt(n) 이하의 수를 나눠보면 알 수 makedotworld.tistory.com #include #include #include #include #include.. 프로그래머스/Level_2 2022. 1. 25. [Level_2 / C++ / 카카오] 문자열 압축 이 문제의 핵심은 문자열의 절반만 확인하면 된다는 것이다. 첫번째 예제에서 크기가 8인 문자열이 주어졌다면 1부터 4사이즈만큼만 반복문을 돌리면된다. 즉, 사이즈가 1~4인 문자열을 돌아보면서 같으면 cnt값을 증가하고 다르면 이전에 증가시켰던 cnt값을 스트링으로 바꾸고 비교해왔던 문자열을 뒤에 붙인다. 그리고 비교해왔던 문자열을 현재 자른 문자열로 교체한다. * 파라미터 값으로 받아온 문자열이 사이즈가 1이였다면 바로 return 1을 해준다. #include #include #include #include #include using namespace std; int solution(string s) { int answer = INT_MAX; if(s.size()==1)return 1; for(int.. 프로그래머스/Level_2 2022. 1. 24. [Level_2 / C++ / 카카오] [1차] 캐시 1. cacheSize 가 0이면 return 도시의 개수 X 5 2. 문자열 대문자로 변환 (소문자, 대문자 구분하지 않는다) 3. map 생성하여 제일 작은 cnt값을 갖는 key 문자열 저장 4. (주의) hit를 해도 cnt 값 갱신 5. 제일 작은 cnt값을 갖는 key 문자열에 해당하는 map을 지우고 새로운 값 추가 #include #include #include #include #include #include using namespace std; int solution(int cacheSize, vector cities) { int answer = 0; map m; int cnt =1; if(cacheSize==0)return cities.size()*5; for(int i=0; i 프로그래머스/Level_2 2022. 1. 24. [Level_1 / C++ / 카카오] [1차] 다트 게임 아이유를 정말 좋아하기 때문에 이 문제는 꼭 풀려고 마음 먹었다. 이 문제는 하라는대로 풀면 된다. 코드를 봐도 쉽게 이해할 수 있을거라고 생각한다. 다만, 저와 똑같은 실수를 하시는 분도 계실까봐 말씀드리지만, 스타상(*)은 해당 점수와 바로 전에 얻은 점수를 2배하는 것이지, 이전에 얻은 모든 점수에 2배를 하는것이 아니다! #include #include using namespace std; int solution(string dartResult) { int answer = 0; string s= dartResult; vector v; string s1=""; for(int i=0; i='0'&&s[i] 프로그래머스/Level_1 2022. 1. 23. [Level_1 / C++ / 카카오] 실패율 map을 활용하여 해당 스테이지와 그 스테이지를 밟고 있는 친구들의 수를 key, value값으로 지정하자. N만큼 반복문을 돌면서 map의 해당 스테이지의 value값을 "스테이지 사이즈 - 넘지못한 친구들의 수" 로 나눠주어 그 몫을 벡터에 저장한다. (넘지못한 친구들의 수 = prev변수로 할당 ) 벡터를 실패율의 내림차순으로 정렬하여 출력하도록 한다. #include #include #include #include #include using namespace std; bool cmp (pair v1, pair v2){ if(v1.second==v2.second)return v1.first v2.second; } vector solut.. 프로그래머스/Level_1 2022. 1. 23. 이전 1 2 3 4 5 다음 반응형