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

jeneve1·2022년 10월 5일
0

지난 9월 24일 토요일 진행된 KAKAO 채용 1차 코딩테스트를 응시했습니다.

1차 코딩테스트는 오후 2시부터 7시까지 5시간 동안 진행되었으며, 총 7문제가 출제되었습니다.

결과

결과적으로는 4.5솔으로 1차 코딩테스트에 합격할 수 있었습니다.

코테 도중에 1, 3, 4번을 엄청 빨리 풀었고, 2번도 쉬운 문제임을 알았기 때문에 '아니 이거 한 6솔하고 넉넉히 붙는거 아닌가?'라는 헛된 희망을 품었지만 5번 문제에 진압됐던게 아쉽습니다.

암만 봐도 모르겠을 땐 그냥 버리고 다음 문제 보는게 맞다는 교훈을 얻었네요...

다른 기업 코테와 비교했을 때, 카카오 코딩테스트는 히든 케이스가 따로 없이 제출했을 때 정답인지 혹은 몇 개의 케이스에서 어떤 이유로 틀렸는지(WA, TLE) 까지 알려주는 점이 좋았습니다.

1번

간단한 문자열 문제였습니다.

연월일이 주어지고, 그 연월일에서 일정 월만큼을 더하고 그 결과값이 만료기한보다 작은지, 큰지를 비교해주면 되는 문제였습니다.

금방 풀었던 것 같습니다. AC를 받았습니다.

2번

그리디 문제였는데,
처음에 무지성으로 구현했다가 TLE를 받아서 잘 보니 그리디였습니다.

쉬운 문제인거 같은데 이상하게 안풀려서 일단 스킵하고 3, 4번을 풀고나서 다시 보니 쉽게 풀 수 있었습니다.

O(n)으로 구현해야 한다는 걸 확인하고, 풀었더니 AC를 받을 수 있었습니다.

3번

어떻게 해야
1. 이모티콘 플러스 가입자 수를 늘리고,
2. 이모티콘 판매 수익을 늘릴 수 있는지

해당 조건을 가장 잘 만족하는 이모티콘의 할인률을 구하는 것이었는데,
이모티콘의 할인률이 10%, 20%, 30%, 40%의 4가지이고 이모티콘의 종류가 7가지여서 모든 경우의 수를 탐색해도 4^7(=16384)개밖에 안되기 때문에 완전탐색으로 풀면 되겠다는 생각을 바로 떠올렸습니다.

백트래킹을 이용하여 모든 경우의 수를 구현하였고,
(사실 itertools 쓰면 더 편한데 요새 삼성 코테 준비한다고 습관적으로 백트래킹으로 풀이했네요)

각각의 경우의 수에서의 이모티콘 플러스 가입자 수와 이모티콘 판매 수익을 계산하여 최적의 case를 찾았습니다.

AC를 받을 수 있었습니다.

4번

이진 트리로 표현할 수 있는 숫자인지를 반환해야 하는 문제였는데,
어떤 이진 트리가 유효하려면 자식 노드가 1인데 부모 노드가 0일 수는 없다는 생각을 했고, 또한 이진 트리의 정의가 왼쪽 subtree와 오른쪽 subtree가 모두 이진 트리인 트리라는 느낌의 재귀적인 정의로 알고 있었기에 재귀적으로 해결할 수 있었습니다.

pseudocode로 보여드리자면,

def isBinTree(tree: str):
	# 재귀 탈출 조건 1 - leaf node
    if len(tree) == 1: return True
    
    # 재귀 탈출 조건 2 - 루트 노드가 0이고 그 subtree 중 1이 있을 때
    if rootNode == '0' and '1' in tree: return False
    
    return isBinTree(leftSubTree) and isBinTree(rightSubTree)
    

이런 느낌으로, 왼쪽 subtree와 오른쪽 subtree가 모두 이진 트리라면, True를 반환하는 느낌으로 코드를 짰습니다.

AC를 받았습니다. 이 사고과정이 굉장히 빠르게 일어나서 이 문제를 푸는데 한 10분 걸린거 같습니다.

5번

엑셀의 여러 기능을 구현하는 문제였습니다.

50 * 50의 범위 제한이 있었고,
문제의 관건은 MERGE와 UNMERGE 기능이었습니다.

엑셀 데이터를 담는 2차원 배열 BOARD를 구현하였고,
셀의 병합 정보를 담는 2차원 배열 MERGE_BOARD를 따로 구현하였습니다.

MERGE_BOARD가 False이면 병합되지 않은 셀인 것이고, (1, 3) 등의 index가 들어있으면 해당 셀과 병합된 셀으로 인식하도록 이용하였습니다.

나름 잘 구현했고 논리 흐름에 문제가 없었다고 생각했지만, 몇 개의 TC에서 WA를 받았습니다. 빠르게 1~4번을 풀이하여 남은 시간을 대부분 5번 문제에 투자했지만 마지막까지 이유를 찾을 수 없었습니다.
(이럴 줄 알았으면 그냥 버리고 6번이나 7번 갈 걸 그랬습니다..)

끝나고 찾아보니 UNION-FIND라는 개념을 알아야 수월하게 풀 수 있는 문제였다고 합니다.

6번, 7번

6번과 7번은 풀이하지 못했습니다.

profile
코테를 좋아하는 코테 뉴비

0개의 댓글