PS

2023 KAKAO BLIND RECRUITMENT 1차 코딩테스트 후기

조금씩 차근차근 2025. 10. 6. 21:52

공식 풀이는 다음 링크를 통해 확인하실 수 있습니다.

https://tech.kakao.com/posts/567

 

2023 카카오 신입 공채 1차 온라인 코딩 테스트 for Tech developers 문제해설 - tech.kakao.com

2023 KAKAO BLIND RECRUITMENT 1차 코딩 테스트가 지난 9월...

tech.kakao.com

 


카카오 공채도 썼겠다, 지난 카카오 공채의 코딩테스트 문제도 풀어보고, 프로그래머스 환경도 체험해보고자 프로그래머스에 존재하는 카카오 2023 블라인드 공채에 출제되었던 문제를 5시간동안 풀어보았다.

 

5시간동안 5문제를 풀었는데, 문제가 복잡해졌을 때 생각을 키보드로만 정리하는 과정이 좀 고되긴 하다.
그림같은 걸 그릴 수 있을 수 있으면 좋을텐데, 이건 코테 환경마다 다르니 일단 보수적인 관점으로 접근해 보고자 키보드로만 생각을 기록하고 풀이를 진행했다.

1번: 개인정보 수집 유효기간

https://school.programmers.co.kr/learn/courses/30/lessons/150370

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

이 문제의 경우, 간단한 날짜를 계산하는 프로그램이었다.

이 문제에서 사용한 핵심 메소드는 다음 두가지였다.

  • String.format()
  • str.split(regex)

처음에 split()을 진행했을 때 단순히 (".") 로 스플릿을 시도해서 제대로 된 답을 얻을 수 없었다.
그래서 프로그래머스에서 제공하는 java doc를 활용하여 split 메소드에 대해 검색해봤는데, 다음과 같은 결과를 확인했다.

split 의 매개변수로는 정규 표현식이 들어간다

따라서 기존 (".")("\\.")로 변경해 문제를 통과할 수 있었다.

  • 실전에서 이와 비슷한 종류의 문제가 발생했을때, 이와 같이 문서를 통해 해결하는 경험을 통해 당황하지 않고 대처할 수 있는 중요한 경험을 얻었다.
  • 하지만, 그냥 문자열 for문을 돌면서 해결하는 것도 나쁘진 않았을듯...?

2번: 택배 배달과 수거하기

https://school.programmers.co.kr/learn/courses/30/lessons/150369

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

이 문제의 경우, 미완료된 지역까지는 무조건 도달해야 했다.

 

만약 이전 지역을 먼저 할당하는 것이 더 효율적이라고 하면, 그 할당으로 더 뒷 지역을 처리하면 그 뒷 지역이 줄여주는 길이가 더 효율적이고, 이는 "이전 지역을 먼저 할당하는 것이 더 효율적이다"라는 가정에 모순된다.

 

따라서 그리디하게 문제를 풀 수 있었다.

3번:이모티콘 할인행사

https://school.programmers.co.kr/learn/courses/30/lessons/150368

/**
특정 할인율 이상이면 구매

구매한 금액이 일정 금액을 넘어가면 그냥 플러스 가입해버림

최대한 많이 이모티콘 플러스 서비스 가입시키고
그 사이에서 이모티콘 구매 비용 최대가 되도록

일단 사게 만들고
그 중 가장 비싸게?

할인율은 7개 각각 10~40까지 조정 가능
할인율 한번 설정 시 마다 100번 순회

사용자 별로 할인율 구매 컷보다 높게 할 이유는 없음
그런데 할인율은 이모티콘별로 설정이 가능함
비싼건 무조건 팔아야 이득인가?
지나치게 할인하면 가입할 사람이 안해버리는 문제

관점을 바꿔서, 가입자 수를 지정해놓고 가능한지 확인해보기?
할인율이 100명에게 전부 영향이 가는 문제

가장 단순하게 일단 전부 판매되도록
사람 수는 100명
사람 수별로 할인은 최대 40%

일괄로 40%를 결정하면?

독립변수
- 상품 별 할인율(4^7)
- 사용자 별 할인율(40개의 경우의 수)
- n개만 팔아도 가입된다면 ok

- 최대 몇명까지 가입시킬 수 있는가?
- 특정 한사람을 가입시키는 필승 방법 - 그 사람의 할인율에 모든 이모티콘 할인율 맞추기
- 더 줄이면 -> 가입이 아니라 구매가 되어버림
- 그럼 싼걸 먼저 할인해야 하나? 비싼걸 먼저 할인해야 하나?
- 목적이 "가입"임을 기억할 것
- 싼걸 먼저 하면, 먼저 가입한 사람의 탈퇴 가능성이 줄어듬
그런데 전부 싼걸 통해 가입하게 됐으면, 오히려 더 많은 사람들이 탈퇴할 가능성 존재
- 할인율이 10 20 30 40 중 하나로 고정되는구나
문제 잘 읽기


*/

긴 고민의 흔적...

이 문제의 경우, 문제를 제대로 읽지 않았다.
사실 요구사항을 정확하게 인지하는 것이 개발의 핵심인 만큼, 이런 실수는 나와선 안됐는데
아쉬울 따름이었다.

위 주석에도 나와있듯이, 할인율이 4종류인 만큼
O(4^n*u*n)으로 풀이가 가능하다.
여기서 n은 이모티콘의 갯수, u는 사용자의 수이다.

4번: 표현 가능한 이진 트리

https://school.programmers.co.kr/learn/courses/30/lessons/150367

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

이 문제는 비트 연산을 통해 푸는 문제였다.

 

가장 중요한 힌트는 "포화 이진 트리"였는데, 이 덕분에 다음과 같은 조건을 깔끔하게 세울 수 있었다.

  • 가운데가 0이면 왼쪽/오른쪽 트리를 나타내는 값은 모두 0이어야 한다.
  • 가운데가 1이면 각 왼쪽/오른쪽 서브트리가 유효한 트리인지 확인한다.
  • 트리가 더 이상 쪼개질 수 없으면 유효한 것으로 간주한다.

따라서 다음 코드를 통해 루트 노드를 찾고, 위 로직을 재귀함수로 구현하였다.

        int mid = 31;
        while(mid > 0){
            if ((1L<<mid) <= number) break;
            mid >>= 1;
        }

5번: 표 병합

https://school.programmers.co.kr/learn/courses/30/lessons/150366

이 문제의 경우 유니온 파인드일 것 같았는데,아쉽게도 유니온 파인드가 기억이 나질 않았다...
그래서 다음 문제를 풀고 이 문제를 붙잡다가 제한시간을 보내게 되었다...

따라서 별 의견이 없다.

6번: 미로 탈출 명령어

https://school.programmers.co.kr/learn/courses/30/lessons/150365

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

d < l < r < u
따라서 최적해는 d 반복 -> l 반복 -> rl 반복 -> r 반복 -> u 반복의 형태를 가진다.

이 문제의 경우, 나같은 경우에는 위 정보를 이용하여 state를 정의한 뒤 그리디하게 문제를 풀었는데, 초기 상태를 깔끔하게 정의하는 것이 꽤 고역이었다.

 

다른 풀이를 보니, dfs 방식으로 푸는 것도 있었다. 

 

 

7번의 경우, 문제를 읽지도 못했다.

 

 

추후 2022 코딩 테스트 문제도 풀어보며 좀 더 프로그래머스에 익숙해지는 시간을 가져야 되겠다.