Problem Sovling Online Judge/프로그래머스 (3) 썸네일형 리스트형 [프로그래머스/20년 카카오 블라인드] 자물쇠와 열쇠(Lv.3), C++ 자물쇠와 열쇠(링크) 문제에서 주어지는 key, lock 은 기껏해야 20 x 20 크기의 2차원 배열이다. 따라서 key 를 lock 위에 겹치도록 한 뒤 겹친 칸의 값을 더해보고 lock 의 모든 칸이 1 이 되었는지 확인하면 된다. 이 과정을 key 배열을 90도씩 회전해가며 모두 검사하기에도 충분한 입력이다. 아래 그림과 같이 겹치기 시작해서 아래 그림처럼 마지막 칸이 겹칠 때까지 key 배열이 lock 배열 위를 순회하도록 한다. 그림에서 볼 수 있듯이 lock 배열의 영역 밖으로 나가는 key 배열의 칸들이 있고 key 값을 lock 과 더하는 과정에서 영역 밖 위치의 접근이 일어나기 때문에 lock 배열에 padding 을 두면 편하다. padding 은 필요한 만큼만 덧붙이면 되는데 key.. [프로그래머스/20년 카카오 블라인드] 괄호 변환(Lv.2), C++ 괄호 변환(링크) 차분히 주어진 순서대로 구현하면 어렵지 않은 문제. 정수를 증감 시키며 괄호의 균형을 확인하면 편하다. 정수 변수를 두고 ( 가 나오면 증가, ) 가 나오면 감소시킨다. 변수가 음수가 된다면 ) 가 먼저 나온 것이므로 올바른 문자열이 아니고, 균형만 확인하고 싶다면 마지막에 0 이 되는지만 확인하면 된다. string solution(string p) { if (p.empty()) return p; string u = "", v = ""; int i = 0, c = 0; for (i = 0; i < p.size(); ++i) { p[i] == '(' ? ++c : --c; u += p[i]; if (c == 0) break; } v = p.substr(i + 1); bool isCorr.. [프로그래머스/20년 카카오 블라인드] 문자열 압축(Lv.2), C++ 문자열 압축(링크) 문자열의 길이가 N 일 때 1 개 단위, 2 개 단위, 3 개 단위... N / 2 개 단위로 잘라본다. (당연히 절반 이상으로 자르면 더 이상 반복되지 않으므로 압축되지 않는다.) 나머지는 단순히 문자들을 순회하며 이전의 단위 문자열과 같은 지 센다. 개수를 덧붙인 새로운 문자열을 만드는 것 보다 경우에 따라 길이값을 늘려가며 정수 길이값 정답을 찾는게 더 효율적이다. 예를 들어 1 개 단위로 자르고 문자열이 aaabbb 라면 a 3 개를 확인한 시점에 개수를 센 정수 변수의 자릿수( = 1) + 단위( = 1) 를 정답에 더하는 식이다. 자릿수를 더하는 이유는 만약 a 가 17 개라면 2 자리만큼 압축된 문자열이 늘어나는 것이므로 자릿수를 더해야 한다. // 정수 n 을 받으면 자.. 이전 1 다음