쿠팡 코딩 테스트 - kupang koding teseuteu

2022 프로그래머스

(주)그렙 / 대표 임성수 / 서울특별시 서초구 강남대로 327, 2층 프로그래머스(서초동, 대륭서초타워) / 사업자등록번호 220-88-75699 / 통신판매업신고 제 2014-서울강남-03241호 / 직업정보제공사업 신고번호 J1200020180027 / 유료직업소개사업 등록번호 (국내)제2021-3210195-14-5-00026호 (국외)서울청 유 제2021-7호 / (주)그렙은 통신판매중개자로서, 통신판매의 당사자가 아니며 중개하는 콘텐츠 및 거래에 대한 책임을 부담하지 않습니다. 단, (주)그렙이 직접 제공하는 콘텐츠에 대해서는 책임을 부담합니다. 프로그래머스 사이트의 모든 콘텐츠, 정보, UI 등에 대한 무단 복제, 전송, 배포, 크롤링, 스크래핑 등의 행위를 거부하며, 이러한 행위는 관련 법령에 의해 엄격히 금지됩니다.

필자는 이번주 금요일에 쿠팡에서 시행한 알고리즘 테스트를 보았다. 물론 카카오에 이은 2번째 코딩테스트였다. 쿠팡도 정말 가고싶은 기업중에 하나라서 이렇게 후기를 작성한다. 문제는 총 4문제가 나왔다. 카카오와 비교하면 카카오는 7문제가 나온다. 하지만 카카오는 5시간, 쿠팡은 3시간이다. 나눠보면 쿠팡은 한문제당 45분 카카오는 42분정도이다. 

체감난이도는 "상"이었다.  확실히 카카오 알고리즘테스트보다 비슷하거나 조금은 어려웠지 결코 쉽지는 않았다. 

문제별로 확인하자

1번문제

1번은 10진수로 주어진 수를 2부터 9진수까지 바꿔서 각 자리수의 곱(0제외)의 최대로 만드는 진수와 그때의 값을 배열의 형태로 출력하는 문제였다. 난이도는 "하"로 10진수를 차례대로 나누어서 각각의 진수로 바뀐뒤 각자리의 곱을 하고 배열로 만들어 답을 도출하면 된다. 다음은 필자의 코드이다.

쿠팡 코딩 테스트 - kupang koding teseuteu

2번문제

2번문제는 '상'이었다. 솔직히 문제는 이해했으나 주어지는 숫자를 날짜시간으로 정확히 업데이트하고 어떻게 문제를 풀어야 할 지 몰라서바로 3번으로 갔다. 시간만 날릴거같은 느낌이 들었다.. 바로 도망갔다. 

3번문제

3번문제는 값의 범위가 2000000000정도 되는 걸 보는 순간 이것은 반드시 이진탐색으로 풀어야한다는 확신을 가졌다. 물론 내 생각이 맞았다. 문제는 해킹이 조작한 숫자를 정확하게 제거하고 조작된 등수를 제외하고 조작되지 않은 등수를 출력해야하는 문제였다. 다음은 필자의 코드이다.

쿠팡 코딩 테스트 - kupang koding teseuteu

4번 문제

마지막 4번문제는 DFS를 이용한 경로의 수를 탐색하는 문제였다. 상당히 어려웠고 처음에 경로를 들렸다가 간다는 것에서 너무 플로이드워셜에 집착한 것이 실수였다. 물론 2차원 행렬로 만드는 것도 쉽지는 않았다. 거기까지는 공통으로 해야하는 작업이어서 플로이드 워셜의 접근은 실수였지만 치명타는 없었고 바로 DFS로 바꿔 풀었다. 다음은 코드이다.

쿠팡 코딩 테스트 - kupang koding teseuteu

안에서 함수를 다시 선언했다. 이것은 DFS를 실행하는 것이다. 

필자는 총 4문제중에 3문제를 풀었다. 테스트 케이스를 만드는 것도 실력이었다. 하지만 그럴 여유가 없었다. 3문제를 풀고 9분이 남았다.

부디 좋은 결과가 있기를 바랄뿐이다.

1. 서류 작성

그동안 경험하고 쌓아왔던 것들을 잘 작성하여(?) 쿠팡 채용페이지를 통해 지원을했다.

지원 방식이 어렵지 않았기 때문에 겁도 없이 가벼운 마음으로 도전을 했다.

코딩테스트가 있는 회사로의 첫 도전!

2. 서류합격

지원을하고 약 2주 뒤 합격 연락이 왔다.

합격 축하와 함께 쿠팡 인사팀에서는 메일을 통해 향후 전형에 대한 안내를 해주셨고,

그 다음 전형인 코딩테스트 관련 안내를 전달해주셨다.

3. 코딩테스트

서류합격 안내 후 약 10일 뒤 코딩테스트에 참여할 수 있는 링크 메일이 전달되었다.

이틀의 기간이 주어졌고 해당 기간에 주어진 시간, 주어진 언어로 테스트를 시작하였다.

사이트는 프로그래머스에서 진행이 되었고 두 문제가 나왔는데 체감상 그렇게 어렵지는 않았다.

프로그래머스 레벨 2정도의 수준으로 생각되지만, 실력부족으로 한 문제는 테스트케이스에서 통과하지 못했다.

4. 1차 면접

코딩테스트를 본 후 약 5일정도 후에 인사팀으로부터 합격 연락을 받았고,

원하는 시간에 면접을 볼 수 있도록 면접 가능 시간을 러프하게 전달해주셨다.

면접자를 배려해주는 부분에서 굉장히 감동을 받았다.

시간을 정하여 회신을 하면 쿠팡 채용후보자 약정서(비밀유지 계약서)를 작성 하고,

다 제출을 하면 면접일정이 잡히게 된다.

1차 면접은 두분과 따로따로 각 한시간씩 진행이 되었고, zoom을 통하여 코딩테스트를 보았다.

총 4문제를 받았는데, 단 한문제도 풀지 못하였다.

그러나 문제를 풀 수 있도록 계속 힌트를 전달해 주시고, 격려해주시는 부분에 또 한번 감동을 받았다.

그리고 어떤 부분을 좀 더 공부하고 준비해야할지에 대해서도 조언을 해주셨다.

5. 1차 면접 결과

면접 결과는 약 3일후에 메일로 전달 받았다. 당연히 탈락.

6. 후기

쿠팡으로의 도전을 통해 내가 어떤것을 준비하고, 어떤것을 공부해야하는지에 대하여 굉장히 많이 생각하게 되었다.

언젠가 또 좋은 기회가 생긴다면, 그때는 이 시기보다 훨씬 성장한 모습으로 면접에 임하고싶다.

2022 하반기 쿠팡 공채 코딩테스트에 응시해보았다!

쿠팡 코딩 테스트 - kupang koding teseuteu

전형 절차는 위와 같다.

쿠팡은 신기하게도 온라인 코딩테스트 합격자에 한해 포트폴리오를 받는다고 한다.

알고리즘을 중요하게 여기는 쿠팡답다고 생각했다.

주의할 점은, 서류 접수 시기에 탈락한 분들도 일부 존재하는 것으로 확인된다는 점.

접수한 사람들 모두 코딩테스트를 치는 것은 아닌 것 같으니 서류접수를 대충 해선 안될 듯하다.

쿠팡 코딩 테스트 - kupang koding teseuteu
이메일로 수신된 코딩테스트 안내

코딩테스트를 꼭 한번 응시해보고 싶었는데 다행히 나는 코테 응시 자격을 획득할 수 있었다.

서류 접수 란에 이력서를 제출했고, 자기소개서는 별도로 제출하지 않았다.

예전에는 해커랭크에서 진행된 것으로 알고 있는데, 이번에는 프로그래머스에서 진행하는 듯하다.


코딩테스트 환경

  • 프로그래머스
  • 3시간 알고리즘 4문항
  • 사용가능언어: C, C++, Java, Javascript, Kotlin, Python3, Swift
  • 이 테스트에서는 외부에서 작성한 코드를 복사하여 붙여넣을 수 없습니다. 코드는 반드시 테스트 자체 코드 에디터에 직접 작성해주세요. (사실상 IDE 사용불가
  • 응시 중 인터넷 및 교재 참고는 불가능합니다.
  • 정답 여부 미공개 (예제 테스트케이스만 제공)
  • 화면공유 필수
  • 모니토앱을 활용한 웹캠 필수
  • 신분증 준비 필수
  • 감독관에게 책상 검사 맡음

외부 IDE 사용 불가하고, 정답 여부를 안알려준다는 점, 구글링 및 교재 참고 불가한 점을 명심하자.


주관적인 난이도 후기

정답 여부를 알 수 없어 확실하지는 않고, 체감 난이도를 간단하게 적어보도록 하겠다.

  체감 난이도 사용 알고리즘
1번 Silver V 구현, 시뮬레이션, 수학
2번 Silver I dp, 이분탐색
3번 Gold IV bfs, dfs, 이분탐색
4번 Gold V 백트래킹, 자료구조

간단한 후기를 남겨보도록 하겠다. 문제가 된다면 비공개 처리 예정.

1번.

범위가 매우 작기 때문에 단순히 시뮬레이션으로 구현해도 맞는 문제이다.

다만, 배팅 금액이 현재 남은 금액보다 크면 안된다는 예외처리를 조심해야 한다. 다행히 이 부분이 친절하게 테스트케이스로 제공이 돼있기 때문에 이 부분으로 WA를 받는 사람은 거의 없을 듯하다.

비트마스킹 성질을 이용해 조금 더 응용하자면, 사실 배팅에 성공하기만 하면 무조건 100원 이득이다!

배팅에서 쭉 지다가 이길 경우, 100000 ... 0(2) - 011111 ... 1(2) = 1 이라는 성질을 떠올리면 된다.

이렇게 하면 expected[i]==actual[i]의 index가 같은 경우까지 도달 거리를 이용하여 더 빠르게 답을 구할 수 있... 긴 하지만! 쿠팡 코테의 경우 정답여부를 안알려주는데다가, 뒤에 문제가 얼마나 어려울지 예상이 안되는 상황이었다. 그렇기 때문에 이런 기교(?)는 펼치지 않고 확실한 시뮬레이션 코드를 제출했다.

외부 IDE 사용이 불가했기 때문에, 이 문제를 풀면서 #include<bits/stdc++.h>, #define all(v) (v).begin(), (v).end()와 같은 축약 표현 템플릿들을 코드에 작성해놓았다. 프로그래머스 IDE 간에 복붙은 가능하기 때문에, 해당 문제에서 템플릿을 꼼꼼히 짜놓은 후 2번~4번까지 템플릿을 복붙하는 작업을 거쳤다.


2번.

되게 문제가 knapsack dp처럼 생겼다. 하지만, 전혀 그럴 필요가 없는 문제.

knapsack dp로 접근하면 한없이 어려워진다. 단순히 cost를 최대로 해야될 뿐 아니라, 시작일시와 종료일시 사이에 있는 작업들이 겹치지 않게 해야되기 때문이다.

dp식을 현재일자 기준으로 최대로 벌 수 있는 cost로 두면, 탑다운이나 바텀업 dp로 요리조리 풀어주면 된다.

시작일자와 종료일자를 고려하기 위해 해당 작업들을 시간 순으로 정렬한 후, 이분탐색을 이용하여 어느 작업부터 가능한지 찾아주는 작업을 O(logN)에 해도록 했다.

이렇게 한 후, 해당 작업들을 탐색하여 가장 cost가 큰 경우를 dp로 리턴하게 했다.

범위가 작다고 백트래킹 풀이를 떠올릴 확률도 있을 듯한데, O(15!)은 매우 큰 시간복잡도이기 때문에 아마 시간초과가 나는 풀이일 것이다.

다만, 적절히 최적화했다면 문제없을수도? 아마 순서가 상관없고 겹치는지 여부만 잘 체크하는 방식으로 O(2^15 * 상수)로 했다면 문제없을 것 같다.


3번.

개인적으로는 가장 어렵다고 생각되는 문제.

우선 섬이 연결돼있는지는 BFS로 찾으면 된다.

특정 값 이상이면 문제 조건에 만족하는 단조함수꼴을 그리기 때문에, 그리고 L값이 10^9로 매우 크기 때문에 이분탐색이 반드시 필요하다. 이분탐색을 사용하지 않으면 아마 시간초과가 날 것이다.

문제는 특정 섬들의 지역이 그 주위에 더 높은 지역이 있으면 가라앉지 않는다는 점이다.

이 부분때문에 체감난이도가 급증했을 듯.

주위에 더 높은 지역이 있으면 가라앉지 않으므로, 역발상으로 해수면이 외부에서부터 흘러온다고 가정하자. 외부에서 섬이 가라앉는 부분이 있다면, 그 부분들로부터 DFS 탐색을 시작하여 가라앉는 섬들을 찾아주고 더 이상 해수면이 갈 곳이 없으면 멈춰주면 된다. 주의할 점은 DFS 탐색할 때 높이가 자기 자신보다 낮은 섬으로 탐색하는 것이 아닌, 해수면보다 낮거나 같은 상하좌우 연결된 섬들은 모조리 탐색시켜야된다는 점이다. 그렇지 않으면 WA를 받게 된다.


4번.

신기한 체스말 문제.

왜 ps 문제들은 항상 체스판가지고 장난치는걸까...? 🧐

룩나이트는 점프도 가능하기 때문에 파손된 지역이 있어도 이동이 가능하다.

즉, 같은 행 및 열에는 절대 중복해서 체스말을 놓을 수 없다.

또, 나이트 이동영역에도 당연히 말을 놓을 수 없다.

그렇기 때문에 자료구조 set을 이용해서 체스말이 존재하면 해당 행/열에는 말을 놓지 않는 방식으로 진행했고, 최대 x, y축의 크기가 9이기 때문에 백트래킹으로 적절히 전처리하였다.

참고로 시작점을 모든 행 또는 열로 다 세팅해놓을 필요는 없다.

또, 시작점이 특정 행/열에 아예 존재하지 않는 경우가 있을까 걱정할 수 있는데, N개의 룩나이트를 모두 배치해야 하므로 모든 행(또는 열)에는 반드시 체스말이 존재해야 한다.

이 문제의 경우 혹시나 시간초과가 날까봐 N=9, 파손된 구역 한 곳을 임의로 두고 테케를 돌려봤는데 다행히 답이 빠르게 나와서 안심했다. (하지만 정답 여부를 모르니 AC라고 단언할 순 없다...)


정답 여부를 알 수 없는 코테는 항상 피말리는 듯하다.

결과를 알 수 없기 때문.

게다가, 외부 IDE 사용이 불가능해서 디버깅을 못한다는 점이 꽤 힘들었다.

자꾸 3번 문제에서 의도하지 않은 이상한 답을 리턴해버리기 때문에 고생 좀 했다 ㅋㅋ

이후에 다행히 문제점을 발견해서 수정하긴 했지만, 정답 여부를 모르기 때문에 AC인지는 두고봐야될 일.

아무튼 쿠팡 코테도 이렇게 끝났다.

꾸준히 알고리즘 문제풀이를 해야되겠다는 필요성을 느끼는 날이었다 :)

+) 22.11.25.(금) 추가

쿠팡 코딩 테스트 - kupang koding teseuteu

탈락 메일을 받았다.

여러 가지 이유가 있겠지만, 서류 질 부족 or 코딩테스트 실채점 점수 or 미졸업 (현재 2학년) 세 가지 원인 중에 주된 원인이 포함돼있지 않을까 추측해본다.

앞으로 꾸준히 공부해서 실력을 보완해야겠다 :)