삼성처럼 C, C++, Java 언어만 허용되는 코딩테스트였다. 그래서 그런지 네이버나 라인에 비해 알고리즘의 난이도는 쉬운 편이었다. 자바를 공부하기 시작하고서 처음으로 응시하는 언어제한 코딩테스트였는데 결과는 나쁘지 않아서 다행이다. 확실히 네이버나 라인에 비해 input 크기가 큰 문제가 출제되는 것으로 보아 시간에 대한 생각을 한 번쯤 해야하겠다. 결과는 2솔.

1번은 배열을 다루는 문제인데 연산 종류에 따라 처리 로직을 분기해야 한다. 그런데 연산 요청이 10만 건으로 아무런 생각없이 array 선언하여 값 기반으로 탐색하는 로직을 작성했다가, 자칫하다간 50000*50000번의 내부 탐색을 진행할 수도 있음을 알아챘다. merge 처리 시 단순 ArrayList 객체를 선언하여 해결하면 테스트 케이스는 통과할지언정 히든 테스트케이스로 10만 건의 요청이 입력되었을 경우 TLE를 출력할 가능성이 높아보인다. 흔한 백준 등 PS 사이트에서 쓰는 트릭을 사용해야 하는데, 유효 카운트를 체크하면서 번호 값 수정은 최대값인 10만 길이의 배열을 선언하여 좌표 기준으로 접근해야 한다.

2번은 HashMap 자료구조를 사용하면 비교적 수월하게 풀린다. input 범위도 그리 크지 않아 값에 따라 1씩 증가시킨 뒤에 HashMap 객체에 담겨진 모든 key에 대해 조회하여 배열에 넣은 후 정렬, 주어진 개수만큼 더해서 출력하면 된다.

3번은 순열문제로 c++이면 stl 내장 라이브러리로 해결하겠으나 하필 Java는 순열을 제공하는 내장 라이브러리 따위는 없기에 별개의 재귀 메소드를 선언해야 한다. 다행인 점은 표본의 개수가 8이라 8!을 하더라도 최대 4만 건에 대해 검사를 진행하고 검사해야할 경우의 수도 10개 가량에 역순까지 고려하면 20개, 매번 표본의 길이만큼 검사한다 생각하면 140 * 4만 정도로 500만 이하의 연산으로 정답을 도출해낼 수 있다. 재귀함수에서 매개변수와 반환 값이 어떻게 동작하는지 아직은 경험이 부족해서 30분 간 개삽질을 하다가 그냥 클래스 변수를 선언해서 조건에 맞을 때 값을 갱신하게끔 하여 풀었다.

후기를 쓰자면 구글은 신이고 나는 등신이었다. 역시 자바는 강력한 언어이고 좋은 언어임은 알지만 PS한정으로는 진짜.. 거지같은 언어라 생각한다. 파이썬으로 풀다가 자바로 작성하려니 무수히 많은 문법 에러들과의 악수를.... 풀이 결과는 2솔로 보인다. 1번의 문제요건을 제대로 읽지 않고 구현에 급급했던 내 불찰이다. 자료구조 예제 코드나 빈출 알고리즘 예제를 미리 띄워두고 이리저리 이동하면서 풀었는데 역시 자주 숙달해둬야 심력소모가 덜하지 않을까. 난이도를 평가하자면 3문제 모두 실버 5~ 실버 1이라 생각하는데 언어 제한이 걸려서 비교적 쉬운 문제로 출제하지 않았을까 싶다. NHN이 만만한 기업은 아닐테니 CS와 기술면접에서 변별력을 확보하려는 취지로 보인다.

결과 : 불합격했습니다. 역시 자바로 PS를 풀어본 적이 한번도 없던 게 패착으로 보입니다.

+ Recent posts