라인 코테 난이도 - lain kote nan-ido

라인 코딩테스트 후기

오전 10시 정각 프로그래머스에서 코딩 테스트를 보았다.
전체적인 난이도는 리트코드 이지와 미디엄 사이였다고 생각한다.
그런데 마지막 문제는 시간 복잡도 문제 때문에 해결하지 못했다.

1번 > hash table 문제

문자열을 받아서 원하는 대로 자른 후 해당 문자열을 사전에 추가해 몇번 나오는지 체크하는 문제였다.
조건이 여러개 있었지만 조건대로만 잘 구현하면 된다. 한 20분 걸린듯..?

2번 > dp 문제

하나의 줄을 원하는 타겟에 맞춰 최소한으로 자르는 것을 리턴하는 문제이다.
홀수 케이스와 짝수 케이스를 잘 구분하여 점화식을 세우면 정답이 보인다.

3번 > 그리디 문제...?

해당 케이스는 수리적인 능력이 필요한 문제 같아 보였다.
내가 생각한 방법론은 전체 연료를 균등하게 분배한다.
가장 큰 것과 작은 것을 뽑는다. 둘이 비슷하게 만든다.
위의 과정을 반복한다.

최댓값을 반환한다..?

총평

쉽지만 쉽지는 않았던 그런 코딩 테스트였다.

라인 코테 난이도 - lain kote nan-ido

오늘 오전 10시에 LINE 상반기 공채의 코딩테스트에 응시했습니다. 마지막으로 봤던 Line 코딩테스트 2개에서 탈락했던 지라(작년 하반기 공채, 동계 채용형 인턴) 조금 두려웠지만 자신감 있게 응시했습니다.

📝 시험 개요

  • 3시간에 6문제 출제, 제출결과 피드백 없음
  • 문자열, 구현 위주의 문제 다수 출제
  • 난이도는 예전보다 쉬웠던 것 같습니다.
    복잡한 알고리즘을 요구하는 문제는 출제되지 않았습니다.
    그러고 보면 라인은 카카오 같이 DFS/BFS류의 복잡한 탐색이 섞인 구현 문제보다는 문자열이나 시뮬레이션 위주의 문제가 자주 출제되는 것 같습니다.

🙇‍♂️ 후기

3시간에 6문제여서 엄청 빠르게 풀었습니다. 빨리 풀다가 엣지 케이스에 걸리지 않을까 노심초사했지만 일단은 다 풀고나서 시간이 남으면 검사하는 전략으로 풀었습니다. 그래서 3번까지는 생각나는 대로 바로바로 풀었습니다.

풀면서 느끼기에는 그렇게 꼬아놓은 문제들이 아니어서 빠르게 넘어갔던 것 같습니다. 그리고 희한하게도 4번 문제가 뭔가 이상할 정도로 빨리 풀려서 5,6번을 푸는데 시간이 많이 남았습니다. 4번 문제를 몇번이고 다시 봤는데 맞는 것 같아서 일단은 넘겼습니다.

5번도 생각한 아이디어가 바로 들어맞는 것 같아서 빠르게 풀었고 마지막 6번을 푸는데 시간을 많이 투자했습니다. 6번을 시작할 때 1시간 여가 남았었던 것 같은데 나중에 엣지 케이스를 찾는 데 시간을 다 투자해서 결과적으로 시간을 꽉 써서 풀었습니다.

한 2~30분을 남기고 모든 문제의 테스트케이스를 통과하고 반례를 찾았습니다. 놀랍게도 3번과 6번에서 엣지 케이스에 걸리는 경우가 있어서 진짜 다행스럽게도 시간 안에 수정해서 제출했습니다.

이번 시험을 보면서 진짜 테스트 케이스를 생각하거나 만들어보는 것이 꼭 필요하다는 걸 느꼈습니다. TDD를 하는 것처럼 문제를 보면서 설계할 때 미리 반례가 떠오르면 기록해두거나 테스트케이스로 만들어두는 편이 나중에 통과하고 반례를 찾는 것보다 좋을 것이라고 느꼈습니다. 연습 문제를 풀 때 TDD식으로 문제를 풀어보는 것도 연습해봐야겠다고 느꼈습니다.

제출 결과는 잘 나온 것 같지만 예전에도 이러고 탈락했던 경험이 있어 아직은 모르겠습니다! 그래도 꼭 다음 기회를 얻었으면 좋겠습니다!!

9/11 09:30 ~ 12:30 LINE 코딩테스트가 열렸다.

아우 팔아파

2020년 하반기/2021년 상반기의 시험과 비교해서, 구현 자체의 난이도는 높지 않았던 것 같다.

프로그래머스 및 라인의 정책상 문제 설명 및 코드를 올릴 수는 없지만, 작성할 수 있는 선에서 최대한 작성해보는걸로...

Q1

사용한 알고리즘: 브루트포스, 단순 구현

예상 난이도 (Solved.ac 기준): B2

단순 중첩 반복문을 사용하면 쉽게 해결할 수 있다.

정말 점수 주는 급의 문제라 긴 코멘트는 생략...

Q2

사용한 알고리즘: 해시

예상 난이도 (Solved.ac 기준): S3

단어의 글자수의 제한이 없다면 쪼금 어려울 수 있었는데, 검색어의 기준이 1글자로 제한되어서 난이도가 대폭 하락한 문제...

research 배열의 길이 만큼의 map/dict 배열을 만들어주고, 각 검색어가 매일 매일 며칠씩 검색되었는지 저장한다.

그리고 반복문 쫙 돌리면 끝~

파이썬 유저라면 a ~ z 까지 확인할 때 숫자로 인덱스 바꿀 필요 없이 ascii_lowercase를 import 해서 사용하면 훨씬 쉽게 구현할 수 있을 것이다.

Q3

사용한 알고리즘: 단순 구현

예상 난이도 (Solved.ac 기준): S2

문제 설명 제대로 안 읽어서 우선순위 큐를 활용한 스케쥴링 문제인가 했는데, 중요도가 합산된다는 것을 나중에 읽어서 시간 날려먹은 문제...

결과적으로 분류 번호가 1 ~ 100이기 때문에, 그냥 분류 번호를 한 번씩 스캔하면서 중요도가 높은 값을 꺼내주면 된다.

다만 시간이 중요한데, 데이터를 삽입할 때 반드시 현재 시간을 고려해야 한다.

만약 현재 시간 보다 같거나 작은 요청시간이 없다면? 이 경우에는 가장 빨리 요청이 들어오는 시간으로 현재 시간을 조정해 줘야 한다.

time = max(time, dt[0]) 같은 식으로 작성하면 쉽게 보정할 수 있다.

또한, 현재 시간에 따라 작업이 1개 요청될 수도, 여러 개 요청될 수도 있는데, 공통적으로 데이터가 앞에서부터 빠지기 때문에 골때릴 수 있다. 이 경우엔 덱을 사용해서 앞에서 데이터를 뺄 수 있게 하거나, 시간 기준으로 역순 정렬을 해서 뒤에서 부터 빼도록 하면 좋다. 

Q4

사용한 알고리즘: 소수 판별, 분할정복

예상 난이도 (Solved.ac 기준): G5

분할정복은 절대 안 나올 줄 알았는데, 나왔다...?

단순히 1, 2, 3, ... 으로 올려가면서 소수를 판단하기엔 배열의 길이가 1,000,000 이기 때문에, 맘 편하게 에라토스테네스의 체로 구하는게 속 편하다. (사실 데이터의 범위가 작기 때문에 될 것 같긴 한데 더 빠른게 좋으니까...)

분할정복 풀이 자체는 어렵지 않다. 다만 코테에서 분할정복 유형이 출제된 경우가 거의 없어 관련 문제를 풀어보지 못한 분들은 어려울 수 있다.

하지만 합병 정렬을 직접 작성해 본 적이 있다면, 정말 간단하게 풀지 않았을까 예상한다.

Q5

사용한 알고리즘: 그래프 탐색, 문자열

예상 난이도 (Solved.ac 기준): G4 ~ G3

A와 B가 유사하고, B와 C가 유사하면 A와 C로 유사하기 때문에, 유사한 관계를 양방향 그래프로 만들고 플러드 필을 돌리면 한 방에 해결되는 문제.

문자열 2글자 삭제를 어려워 할 수 있는데, 문자열 삭제 함수를 delete(string s1, string s2, int remain_cnt) 같이 만들어주면 딱 한글자 삭제하고 remain_cnt를 줄이는 방법으로 매우 쉽게 구현할 수 있다.

그 밖의 다른 부분은 죄다 문자열 처리라 스킵.

Q6

사용한 알고리즘: 해시

예상 난이도 (Solved.ac 기준): G5

날짜 부분을 조심하면 쉽게 구할 수 있다.

힘들게 문자열 계산을 하지 말고, 그냥 int로 바꿔버리면 k일 이내 계산이 굉장히 쉽다.

전체 구매 수를 담는 map/dict 하나, 각 유저가 특정 물건을 구매한 횟수를 담는 map/dict (중첩으로 짜면 된다.)를 하나 만들어주면 쉽게 짤 수 있다.

------

총평: 2020 하반기 > 2021 상반기 (1교시) > 2021 하반기 라고 본다.

서류 없이 코테부터 응시 가능해서 난이도가 오를 것이라고 예상했는데, 의외다?

필기에서 다 걸러낼려나...

총 6문제가 있으며 제한시간은 10시~13시 3시간이다.

캠, 모니터 화면은 안 켜도 된다. 즉 검색도 가능한 것 같다.

1번

* 난이도: 백준 실버 (문자열)

* 태그: 구현

*푼 시간: 10분

정규식과 특수 조건을 찾아 조건에 맞게 해결하면 된다.


2번

*난이도: 백준 실버,골드? (조합, bfs,dfs,문자열)

*푼 시간: 25분

2번은 키보드 중 n개를 선택했을 때 주어진 입력 가능한 값들에 대해 최대 점수를 구하면 된다. shift도 고려해야한다.


3번

*난이도: 백준 실버 (구현)

*푼 시간: 20분

팀별로 재택근무, 오피스근무 관련 문제였다. 객체를 이용하면 쉽게 구현할 수 있었다.


4번

*난이도:  백준 골드? (bfs,dfs)

*푼 시간: NO(정확하지 않음)

표가 있을 때 각 셀을 옮겨가며 각 크기를 맞추는 최소 횟수를 구하는 횟수 문제였다.


5번

*난이도: 백준 골드 (그리디)

*푼 시간: NO(정확하지 않음)

우선권의 개수가 주어지고 다른 사람과 경쟁해 최고 점수를 구하는 문제였다. 


6번

*난이도: 모름!

*푼 시간: NO

문제가 너무 길어서 안 봤다..


정확하게 제출한 건 1,2,3번밖에 없는 것 같다(답인지는 모르겠지만)

4,5번은 테스트케이스는 모두 잘 맞았는데 전체적으로 맞은 지 모르겠다.