[PS][기출문제] 카카오

1 minute read

2020 KAKAO BLIND RECRUITMENT

1. 문자열 압축

  • 개선사항
    • 문자열을 압축할 때 입력받은 문자 s의 길이/2 초과에 대해서는 나누어보지 않아도 된다.
    • 계수를 나타내는 변수를 a가 아닌 cnt 또는 coef로 두어 이해하기 쉬운 코드를 작성한다.
    • token들을 vector로 저장하는 방법을 적용하는 것이 시험 당일에는 더 빠른 정답을 도출할 수 있을 수도 있다.
    • 마지막 토큰을 비교하고 알고리즘을 종료하는 조건을 미리 생각하고 시작하지 못했다. 두 개의 토큰을 비교해야하기 때문에 두 번째토큰을 구할 수 없다면 알고리즘을 종료해야한다.(이 부분을 빠르게 생각하지 못했다.) 그리고 종료할 때 하나만 남은 토큰에 대한 처리도 이루어져야 한다.
    • 프로그래머스 시험에서 복붙이 안되는 경우가 있다. 프로그래머스 창에서 바로 코딩하는 연습을 하자.
  • 정답코드

2. 괄호 변환

  • 개선 사항
    • 문제의 조건에 따라서 쭉 따라가보니 쉽게 풀기는 했다. 하지만 옳바른 문자열을 찾는 코드가 더 간결해질 수 있다.
      bool check(const string &a) {
        int r = 0;
        for (char ch : a) {
            if (ch == '(') ++r;
            else --r;
            //음수가되는 순간 false를 return함으로써 옳바르지 않은 문자열을 찾는다.
            if (r < 0) return false; 
        }
        //stck.empty()와 같은 효과
        return r == 0;
      }
      
    • string에 들어있는 문자열을 출력 및 변환하는 코드가 간결해질 수 있다.
      for (char &ch : u) ch = ch == '(' ? ')' : '(';
      
  • 정답코드

4. 가사 검색 : 정확성O효율성X

  • 개선 사항
    • 정확성 테스트는 쉽게 통과했지만 효율성 테스트는 알고리즘을 생각하지 못함
  • 정확성O효율성X정답코드
  • 정확성O효율성O정답코드 : Tri 자료구조 및 이분탐색을 사용하는 방법을 적용

3. 자물쇠와 열쇠