본문 바로가기
생각 정리/코딩테스트

21.09.11 라인, 카카오 코딩테스트

by mintropy 2021. 9. 11.

라인 코딩 테스트

1. 간단한 경우의 수 확인

- 배열에서 특정 조건을 만족하는 부분 배열의 경우의 수 확인

- 배열을 한 번 탐색하며, 각 조건이 맞을 때 경우의 수 확인

- 문제를 확인하고 거의 바로 해결방법을 떠올린 문제

 

2. 문자열에서 알파벳 등장 횟수 계산

- 여러 개의 문자열에서 각 문자열 별로 알파벳 등장 횟수 확인

- 각 알파벳 등장 횟수에 따라 결과 도출

- 알파벳의 확인이라 아스키코드를 활용해서 계산, 출력은 다시 알파벳으로 변환

 

3. 시간순에 따른 쿼리를 순차적으로 시행

- 각 작업을 할 때마다 다음 작업을 진행하는지를 확인해야 함

- 쿼리가 비교적 많다고 생각해서 더 효율적인 알고리즘을 고민하다가 해결하지 못함

- 브루트 포스 방식으로 구현했으면 어땠을까 라는 생각

 

4. 규칙 찾기

- 각 수를 1차원 배열로 표현했을 때, 지속해서 나누어지는 구간을 고려해야 됨

- 1차원 배열이지만, n차원 배열을 채워 넣는 느낌으로, 구간 탐색

- 처음에는 단순한 세그먼트 트리와 같은 느낌을 받았는데, 실상은 n차원 배열과 더 가까운 느낌

 

5. 문자열 비교

- 주어지는 두 문자열 배열에 대해, 기준 조건을 만족하는지 확인

- 비교해야할 기준을 분류하고, 작업 시행했지만, 놓치는 부분 발생했음

- 시간이 조금 더 있었다면, 디버깅을 통해 놓치는 부분을 확인할 수 있었을 것 같다는 생각이 들어 아쉬움

 

6. 문자열 파싱 후 각 문자열의 등장 횟수에 따라 분류

- 구매 / 재구매를 분류하는게 처음에는 조금 까다로웠음

- 구매한 사람을 집합을 활용해 넣고, 숫자는 구매, 재구매를 모두 따로 계산하는 등의 과정으로 해결

- 조금 더 깔끔한 코드 구조가 가능할 것 같은데, 시간이 조금 아쉬움

 


카카오 코딩 테스트

1. 문자열 등장 횟수 확인

- 각 문자열이 얼마나 등장했는지를 확인하고, 출력

- 문자열을 다루기 위해 딕셔너리의 키-값을 바꿔주며 관리했는데, 각 문자열에 해당하는 인덱스를 숫자로 두어 검색했으면 더욱 빠르게 해결 가능했을 것 같음

 

2. 숫자에서 0을 기준으로 나누어 졌을 때, 소수의 개수

- 각 수를 해당 진수로 변경한 후, 0으로 나누어지는 구간에 해당하는 숫자마다 소수인지 확인

- 처음에는 모든 숫자를 에라토스테네스의 체로 해결하려 했는데, 너무 큰 숫자가 나오는 경우가 발생

- 그래서 확인해야 할 숫자가 하나이면 특히 크다고 생각해서 제곱근에 해당하는 수까지만 확인하여 처리

- 나머지 경우는 에라토스테네스 체로 해결

 

3. 시작 / 끝 시간을 기준으로 주차요금 부과

- 시작 / 끝 시간이 문자열 HH:MM으로 주어져서 각 시간, 분 차이를 따로 계산하기보다 00:00부터의 몇 분이 지났는지를 기준으로 계산

- 딕셔너리의 값으로 총 주차시간, 입차시간 표시하여 해결

- 시간을 계산하고 시간별 요금을 다시 계산하는 과정이 있어 나름 재밌었지만, 간단한 문제

 

4. 특정 조건을 만족하는 최대의 경우의 수

- 다른 비슷한 문제들처럼, 특정 조건을 만족하는 결과들 중 최대 / 최소를 찾는 문제

- dfs를 활용하여 모든 경우의 수 탐색했는데, 깊이가 10이므로 충분히 가능할 것이라 생각했고, 통과

 

5. 트리에서 최적의 값 찾기

- 이진트리에서 루트를 포함하는 부분트리를 구해야 하는데, 루트에서 출발한다는 조건 때문에 많이 까다로웠던 문제

- 탐색이 깊이나 너비로 이루어진게 아니라, 지속적으로 루트까지 올라왔다가 내려가는 경우도 있을 수 있어서 더 좋은 구현 방법은 고민

 

6. 2차원 배열 누적합 응용

- 2차원 배열의 많은 쿼리 문제를 떠올렸는데, 어떻게 적용할지를 많이 고민함

- 쿼리를 최소화할 필요가 있다고 생각했고, 누적합을 구하기 위해 2차원 배열의 각 자리에 누적합을 해결하기 위한 값을 저장

- 처음에는 값 하나로 해결하려 했는데, 해당 값을 밑, 오른쪽으로 누적합을 하면 중복으로 계산되어 문제 발생

- 이를 해결하기 위해 각 자리마다 밑으로만 갱신할 값과 오른쪽으로 갱신할 값을 나누어 계산했고, 오른쪽으로 갱신되는 값이 최종적으로 누적합이 됨

- 처음에는 시간초과났다가, 수정하여 해결

- 많이 고민했고, 그래서 그만큼 풀어낸 후 즐거웠던 문제

 

7. 게임이론

- 게임이론 문제는 몇 번 접해봤는데, 이 문제를 어떻게 해결할지를 찾지 못함

- dfs로 구현하다 잘 구현이 되지 않아서 아쉽게도 테스트 케이스 절반 정도만 맞추는 코드로 제출

 

 


코딩테스트를 마치며

작년 이맘때쯤 카카오 코딩테스트를 처음 접했었다. 개발자라는 목표를 호기심과 의구심 그리고 기대감으로 시도했다. 나름 파이썬으로 다양한 공부를 했었고, 자신감까지는 아니더라도, 부족하지는 않을 것이라는 생각도 가졌다. 그러나 거의 바로 오만했었다 라는 생각으로 바뀌었다. 그때도 7문제였던 것으로 기억하고, 그중 겨우 2문제 정도만 코드를 작성했다. 제대로 풀어내지도 못했다.

그러다 올해 2월 졸업을 앞두고, 더욱더 큰 호기심과 관심을 가졌고, 그때서야 PS, CS와관련한 부분을 공부했다. 그렇게 공부를 시작하고, 9개월이 지난 지금, 그리고 첫 코딩테스트를 보고 1년이 지난 지금, 과거보다 확실히 많이 성장했음을 나 스스로도 느끼고 있다. 특히 이전 9개월가량 공부하며 큰 성장을 하는 계기도 있었지만, 많이 쳐지는 시기도 있었다. 7월 SSAFY를 시작하고, SSAFY에 의한 직접적인 성장도 있겠지만, 다양한 사람들과 다양한 코드를 만나고, 그로 인해 더욱 활력을 찾아 성장의 원동력이 된 것 같다.

추가적인 코딩테스트나 다른 취업과정에서 성공적 일지는 아직 잘 모르겠지만, 내가 느낀 나의 성장과 그것을 앞으로도 계속해나갈 것이라는 생각이면 한 달 뒤, 일 년 뒤에는 확실히 많이 성장할 것이다.


수정1. 21.09.15 라인 코딩테스트 합격

수정2. 21.09.17 카카오 코딩테스트 합격

댓글