라인 코테 준비 - lain kote junbi

라인 코테 준비 - lain kote junbi

라인 코딩테스트 코딩테스트학원 코테학원

LINE은 신입 채용을 위해 개발자들을 모아 문제 출제 위원회를 꾸립니다.

2020년 4월에 실시한 LINE 코딩테스트도

현업의 LINE 개발자 총 10명 정도가 문제 출제 위원회에 참여했습니다.

신입 개발자가 필요한 각 부서의 실제 담당자들로 구성되었으며,

작년에 입사한 경력 2년차 직원부터 15년차 직원까지 구성원의 경력은 다양합니다.

오랜 경력을 가진 출제 위원의 경우 요즘 학교에서 배우는 것에 대해 정확히 알지 못합니다.

과거와 비교해서 요즘 대학의 전공 필수 과목에도 차이가 있고, 달라진 과목명도 많습니다.

따라서 작년에 합격한 분들과, 면접관으로 참여하신 분들 대상으로

설문 조사와 인터뷰를 진행해 실제 지원자들이 어떤 생각을 갖고 있는지 파악합니다.

기술 트렌드 또한 바뀌고 있기 때문에 이러한 변화를 채용 과정에 반영하기 위해

코딩테스트 문제를 출제할 때 출제 위원회를 새로 꾸립니다.

이번 상반기의 경우 '능동적인 문제 해결력'이 핵심 키워드였습니다.

개발자로서 자신의 일상에서 문제를 스스로 찾아내고 해결할 수 있는 사람을 찾고자 했습니다.

학과 공부만 열심히 하는 것 보다는

실제 코딩해서 간단한 것이라도 직접 구현하는 것이 도움이 됩니다.

특징

필기테스트의 경우 라인에서 지원하는 여러 직무들에 대해

전반적으로 해당되는 문제가 OX, 객관식으로 출제됩니다.

코딩테스트는 다른 IDE를 사용하여 컴파일 후 소스코드만 붙여넣는 것도 가능합니다.

기본적인 자료구조와 알고리즘을 묻는 문제들이 출제됩니다.

그러나 은근히 함정이 많기 때문에 빠르고 정확히 푸는 훈련이 중요합니다.

테스트 케이스가 많지 않은 것이 특징입니다.

테스트 케이스를 직접 생성해서 비교하는 것이 필요합니다.

어려운 알고리즘을 이해하고 활용하는 것 보다는

문제의 요구 사항을 이해하고 컴퓨터 공학 이론을 바탕으로 그에 맞는 적절한 알고리즘, 자료구조 등의 해결책을 찾아 구현하는 것이 중요합니다.

라인 코딩테스트에 출제되는 문제에 대한 이해를 돕기 위해

2019년 상반기 라인 코딩테스트에 실제 출제된 문제를 보겠습니다.

라인 코테 준비 - lain kote junbi

연인 코니와 브라운은 광활한 들판에서 '나 잡아 봐라' 게임을 한다.

이 게임은 브라운이 코니를 잡거나, 코니가 너무 멀리 달아나면 끝난다.

게임이 끝나는데 걸리는 최소 시간을 구하시오.

조건

코니는 처음 위치 C에서 1초 후 1만큼 움직이고,

이후에는 가속이 붙어 매 초마다 이전 이동 거리 + 1만큼 움직인다.

즉 시간에 따른 코니의 위치는 C, C + 1, C + 3, C + 6, …이다.

브라운은 현재 위치 B에서 다음 순간 B – 1, B + 1, 2 * B 중 하나로 움직일 수 있다.

코니와 브라운의 위치 p는 조건 0 <= x <= 200,000을 만족한다.

브라운은 범위를 벗어나는 위치로는 이동할 수 없고, 코니가 범위를 벗어나면 게임이 끝난다.

입력 형식

표준 입력의 첫 줄에 코니의 위치 C와 브라운의 위치 B를 공백으로 구분하여 순서대로 읽는다.

출력 형식

브라운이 코니를 잡을 수 있는 최소시간 N초를 표준 출력한다.

단 브라운이 코니를 잡지 못한 경우에는 -1을 출력한다.

예제

입력: 11 2

출력: 5

코니의 위치: 11 → 12 → 14 → 17 → 21 → 26

브라운의 위치: 2 → 3 → 6 → 12 → 13 → 26

브라운은 코니를 5초 만에 잡을 수 있다.

BFS로 접근하여 반례를 찾고, 반례를 분석하여 올바른 접근 방법을 찾아내는 것이 핵심인 문제입니다.

solve 함수는 t 값을 증가시키면서 '코니가 t초 후에 p 위치에 도착했을 때,

브라운이 p 위치에 t-2k(단, k>=0인 정수) 시간에 도착했는제 여부'를 판단하여

해당 조건을 만족하는 t를 찾는 알고리즘입니다.

int solve(int conyPosition, int brownPosition) { int time = 0; bool visit[200001][2]; queue<pair<int, int> > queue; memset(visit, 0, sizeof(visit)); queue.push(make_pair(brownPosition, 0)); while (1) { conyPosition += time; if (conyPosition > 200000) return -1; if (visit[conyPosition][time % 2]) return time; for (int i = 0, size = queue.size(); i < size; i++) { int currentPosition = queue.front().first; int newTime = (queue.front().second + 1) % 2; int newPosition; queue.pop(); newPosition = currentPosition - 1; if (newPosition >= 0 && !visit[newPosition][newTime]) { visit[newPosition][newTime] = true; queue.push(make_pair(newPosition, newTime)); } newPosition = currentPosition + 1; if (newPosition < 200001 && !visit[newPosition][newTime]) { visit[newPosition][newTime] = true; queue.push(make_pair(newPosition, newTime)); } newPosition = currentPosition * 2; if (newPosition < 200001 && !visit[newPosition][newTime]) { visit[newPosition][newTime] = true; queue.push(make_pair(newPosition, newTime)); } } time++; } }

일반적인 알고리즘 경진대회는

1등을 가려내기 위해 복잡하고 어려운 문제를 출제하는 경향이 있습니다.

LINE의 코딩테스트는 개발자로서의 개발 능력을 확인하는 데 목적이 있는만큼

어려운 알고리즘을 이해하고 활용하는 것이 익숙한 것보다는,

문제의 요구사항을 이해하고, 그에 맞는 적절한 해결책을 찾아 구현하는 것이 중요합니다.

라인 코딩테스트 준비 코딩테스트학원 코테학원

라인 코딩테스트 준비 코딩테스트학원 더바른코딩학원은

과학고등학교, 컴퓨터공학과 대학생들과 대기업 사원들을 대상으로

C언어를 가르친 원장님께서 직접 지도합니다.

'어떻게 가르치면 학생들이 더 쉽고 확실하게 이해할 수 있을까'

원장님께서 끊임없이 연구로 제작된 커리큘럼과 교재로 수업합니다.

단순 기능 구현을 위한 코딩으로는 코딩테스트에 합격할 수 없습니다.

자료구조와 알고리즘에 대해 이해하고,

다양한 알고리즘을 나의 코딩 실력으로 만드는 훈련이 필요합니다.

더바른코딩학원은 자신이 생각하는 최적의 코드를 직접 구현할 수 있도록 훈련합니다.