반응형

안녕하세요. 이전 포스팅에서는 코딩테스트 기초에 대해서 알아봤었습니다. 이번 포스팅에서는 코딩테스트 꿀팁과 더 추가로 공부하면 좋은 심화 알고리즘들에 대해 소개하겠습니다. 기초편을 안보신 분들은 아래 링크에서 확인해보시길 바랍니다.

 

https://nakco.tistory.com/entry/%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A1%9C-%EC%B7%A8%EC%97%85%ED%95%98%EA%B8%B0-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EA%B8%B0%EC%B4%88%ED%8E%B8

 

개발자로 취업하기 - 코딩테스트 (기초편)

안녕하세요. 이번 포스팅에서는 코딩테스트에 대해 다뤄보겠습니다. 개발자 스펙과 자기소개서 작성법을 보고 싶으시다면 이전 포스팅들을 참조해 주시길 바랍니다. https://nakco.tistory.com/ 낙서

nakco.tistory.com

 

프로그래머스 고득점 Kit을 전부 완료하였다면 이젠 실전 연습을 해야할 때입니다. 기업의 코딩테스트는 보틍 2~4시간 정도 주고, 4~7문제 정도를 풀어야합니다. 이때 중요한 점은, 부분점수는 아무 의미가 없다는 것입니다. 한 문제당 100점 or 0점이라고 생각하셔도 무방합니다. 보통 50%이상 맞추면 합격권이기 때문에, 선택과 집중을 잘하여 풀수 있는 문제를 완벽하게 푸는 것이 핵심입니다.

 

코딩테스트 전략

코딩테스트는 제한 시간이 있고, 빠르게 최대한 많은 문제를 풀어야 합니다. 하지만 그렇다고 조바심 내서 이문제 저문제 풀다보면 결국 풀 수 있는 문제도 못풀고 시간만 낭비하게 될 것입니다. 그렇다면 어떻게 전략을 짜야 할까요? 네, 바로 풀 수 있을 문제에 선택과 집중을 해야합니다. 어려운 문제에 더 높은 점수를 주는 기업도 있지만, 보통은 쉽든 어렵든 푼 문제 수로 갈리기 때문에, 내가 풀 수 있는 문제가 무엇인지 파악하는 것이 중요합니다.

 

1. 문제 파악하기

 문제를 읽으면서 어떤 알고리즘을 써야할지 먼저 알아내야합니다. 저희는 고득점 Kit를 푼 상태이기 때문에 해당 유형의 문제가 나오면 무조건 파악할 수 있습니다. 여러 코딩테스트를 봐보았을때 문제가 다 거기서 거기고, 그냥 내용만 살짝 바뀌는 정도였습니다. 따라서 내가 아는 유형인지 먼저 파악하고, 파악이 안될 시 우선 과감히 버리는 것을 추천드립니다. 그렇게 먼저 내가 아는 유형부터 문제를 풀도록 합니다. 

 

2. 문제 손으로 먼저 풀기

 알고리즘 문제를 풀 때 절대 문제를 읽으면서 바로 코딩해서는 안됩니다. 우선 문제를 모두 읽으면서 이해하고, 손으로 직접 풀어본 후, 그것을 코딩으로 옮기는 것이 순서입니다. 무작정 시작한다면 중간에 꼬여서 코드를 수정하고, 또 다시 문제를 읽고 예외를 발견하여 또 수정하고, 이러다 보면 코드도 더러워지고 나중엔 마구마구 꼬여버릴 수 있습니다. 제 경험상 다 이해하고 손으로 풀고, 코드로 옮기는 것이 훨씬 빨랐습니다.

 

3. 30분 내로 못풀면 넘어가기

 문제를 풀다보면, 분명 잘 푼거 같은데 정답이 아닌 경우가 있습니다. 이런 경우는 보통 3가지 이유로 나뉩니다.

 

(1). 내가 생각 못한 예외 상황이 있다.

(2). 아예 잘못된 알고리즘을 선택했다. (시간 복잡도를 고려 못했을 경우)

(3). 코드상 문법이 잘못된 부분이 있다. (Segmentation Fault, Runtime Error 등..)

 

어떤 이유든지 이러한 경우에는 우선 넘어가도록 합시다. 거의 다 풀었다고 생각하지만, 해당 문제만 붙잡고 있을 순 없는 노릇입니다. 넘어가서 다른 문제를 풀다보면 해결방안이 생각 날 수도 있고, 그때 돌아와서 풀는게 낫습니다. (2)번 같은 경우에는 코드를 싹 다 갈아 엎어야하는 문제가 있고, 또한 모르는 알고리즘이여서 원래부터 못푸는 문제였을 확률이 매우 높습니다. (3)번 또한 컴파일러를 보통 사용할 수 없기 때문에, 디버깅하는데 너무 많은 시간을 허비해야하기 때문에, 우선 풀 수 있는 다른 문제들로 넘어가고, 시간이 남거나 해결방안이 떠올랐을 때 돌아가도록 합시다. 시간 배분하는 것이 매우 중요합니다.

 

 

 

추가로 알아두면 좋은 알고리즘

  코딩테스트를 볼때 보통 맨 밑에 보면 조건이 있습니다. 데이터의 사이즈와, 시간 제한이 있는데, 저희가 사용하려는 알고리즘이 해당 제한 내에서 돌아갈 수 있는지 판단하는 것이 중요합니다. 계산해보고 안되는데 더 줄일 방법이 없는 경우에는 저희가 모르는 알고리즘이 있다는 뜻이겠죠!? 따라서 시간복잡도를 줄이는데 주로 사용되는 알고리즘들에 대해서 소개하겠습니다.

 

1. 이분 탐색

https://nakco.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%9D%B4%EC%A7%84-%ED%83%90%EC%83%89%EC%9D%B4%EB%B6%84-%ED%83%90%EC%83%89

 

알고리즘 - 이진 탐색(이분 탐색)

개념 이진 탐색이란 데이터가 정렬돼 있는 배열에서 특정한 값을 찾아내는 알고리즘이다. 배열의 중간에 있는 임의의 값을 선택하여 찾고자 하는 값 X와 비교한다. X가 중간 값보다 작으면 중간

nakco.tistory.com

 

2. Union & Find

https://nakco.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-Union-Find

 

알고리즘 - Union & Find

개념 그룹을 지을 때 사용할 수 있는 알고리즘이다. 처음에 자기 자신을 부모로 설정하고 조건에 따라 부모를 설정한다. Find는 자신의 최상위 부모를 찾는 역할을 한다. Union은 두 변수의 부모가

nakco.tistory.com

 

3. 누적합 (Prefix Sum)

https://nakco.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%88%84%EC%A0%81%ED%95%A9Prefix-Sum

 

알고리즘 - 누적합(Prefix Sum)

개념 말 그대로 구간의 누적의 합을 구하는 알고리즘이다. 배열에 값을 저장하고 하나씩 더해가는 방식은 O(n^2)의 시간 복잡도를 갖는다. 하지만 누적합 알고리즘을 사용한다면 O(n)으로 시간복

nakco.tistory.com

 

4. 크루스칼 알고리즘 (Kruskal)

https://nakco.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%ED%81%AC%EB%A3%A8%EC%8A%A4%EC%B9%BCKruskal

 

알고리즘 - 크루스칼(Kruskal)

개념 가장 적은 비용으로 모든 노드를 연결하기 위해 사용하는 알고리즘이다. 최소 비용 신장 트리를 만들기 위한 대표적인 알고리즘으로 흔히 여러개의 도시가 있을 때 각 도시를 도로를 이용

nakco.tistory.com

 

5. 다익스트라 (dijkstra)

https://nakco.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%8B%A4%EC%9D%B5%EC%8A%A4%ED%8A%B8%EB%9D%BCdijkstra

 

알고리즘 - 다익스트라(dijkstra)

개념 다익스트라(dijkstra)알고리즘은 다이나믹 프로그래밍(dp)를 활용한 대표적인 최단 경로 탐색 알고리즘이다. 다익스트라 알고리즘은 하나의 정점에서 다른 모든 정점으로 가는 최단 경로를

nakco.tistory.com

 

6. 인덱스 트리 (Index Tree)

https://nakco.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%9D%B8%EB%8D%B1%EC%8A%A4-%ED%8A%B8%EB%A6%ACIndex-Tree

 

알고리즘 - 인덱스 트리(Index Tree)

개념 이진 트리 중 하나로 구간 합을 구하는데 사용된다. 말단 노드에는 원소들이 들어 있고 부모는 자식들의 합이 된다. 부모는 모든 자식들의 합이 되기 때문에 연속되는 구간의 합을 구할 수

nakco.tistory.com

 

마무리

 저는 이러한 공부 방법으로 라인을 제외하고는 모든 기업의 코딩테스트에서 합격했습니다. 라인은 시간 분배를 못하고, 앞에 문제에서 끙끙대다가 풀 수 있는 문제도 못풀고, 시간분배를 못해 떨어졌다고 생각합니다. 여러분은 꼭 시간 분배를 잘 하시길 바랍니다! 제가 코딩테스트를 본 기업은 네이버, 카카오, 신한은행, 삼성전자, 네이버 클라우드 등이 있는데 나중에 시간이 된다면 각 기업의 코딩테스트에 대해 리뷰해보도록 하겠습니다. 오늘도 읽어주셔서 감사합니다. 개발자, 취준생 여러분 항상 응원하겠습니다.

반응형
반응형

안녕하세요. 이번 포스팅에서는 코딩테스트에 대해 다뤄보겠습니다. 개발자 스펙과 자기소개서 작성법을 보고 싶으시다면 이전 포스팅들을 참조해 주시길 바랍니다.

https://nakco.tistory.com/

 

낙서 코딩

삼성전자 개발자 출신의 취업, 코딩 낙서장입니다. 코딩 공부를 하고, 개발자로 취업하는 길이 매우 힘들었기 때문에 꿀팁을 공유하기 위해 블로그를 개설했습니다.

nakco.tistory.com

 

자기소개서까지 합격하신 여러분 축하드립니다. 하지만 아무리 자기소개서를 잘 썼다고 해도 코딩테스트에서 떨어지면 말짱 도루묵이겠죠! 코딩테스트는 갑자기 준비할 수 없는 영역입니다. 따라서 미리미리 준비를 해놓아야 합니다. 보통은 4문제 ~ 7문제로 이루어져있고, 문제의 절반정도 풀면 합격할 수 있습니다. 문제의 난이도는 회사마다 매우 상이하지만, 보통 1문제는 엄청 쉽고 2문제 부터 백준 실버 ~ 골드, 프로그래머스 level 2 ~3 정도라고 생각합니다.

 

코딩테스트 준비 사이트

 이전에 알고리즘을 해본적이 없거나, 기초가 부족하다면 바로 문제를 풀기는 어려울 것입니다. 코딩 문제를 풀 수 있는 사이트는 백준, 프로그래머스 등이 있는데, 백준도 물론 좋은 사이트지만 저는 프로그래머스를 강력 추천드립니다. 백준에는 너무도 많은 문제가 있어, 무엇을 풀어야할 지 감이 안오고, 또한 컴파일러가 저는 프로그래머스가 훨씬 좋다고 느꼈습니다. 시험 자체도 프로그래머스 사이트에서 보는 기업이 꽤 있기에, 프로그래머스 사이트를 강력 추천드립니다.

 

프로그래머스에 알고리즘을 입문하기 굉장히 좋은 페이지가 있어 소개해드리겠습니다.

https://school.programmers.co.kr/learn/challenges?tab=algorithm_practice_kit 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

바로 코딩테스트 고득점 Kit 입니다. 해당 페이지에는 자주 나오는 유형별로 문제가 나누어져있고, 각 테마마다 level 1~3까지의 문제들이 구비되어 있습니다. 

 

자, 그렇다면 해당 사이트에서 어떻게 공부를 해야할까요? 우선 해당 개념을 먼저 익혀야합니다. 무작정 문제 먼저 푼다고해서 절대 문제를 풀 수 없습니다. 코딩도 수학과 마찬가지로 공식을 먼저 이해해야 문제를 풀 수 있습니다. 알고리즘은 수학의 공식과 똑같습니다. 이를 이해하지 못한다면 문제는 손도 못댈것입니다.

 

코딩테스트 고득점 Kit 공부 방법

한 항목의 개념을 익히셨다면, level 1 문제만 우선 풀어보도록 합시다. level 2 부터는 절대 쉽지 않습니다. 우선 각 항목의 개념을 익히면서 level 1 문제만 푸는 것을 목표로 합니다. 그렇게 모든 항목의 level 1 문제를 풀고나면, 다시 시작입니다. 다시 각 항목의 개념을 공부합니다. 항목이 10개가 되기 때문에 기억이 잘 안날 수 있고, 다시 보면 분명 더 알아가는 것이 있을 것입니다. 그 후에 level 2 문제에 도전합니다. 아마 이때부터 쉽지 않을 것입니다. 하지만 지금부터가 중요합니다. level 2 정도만 스스로 풀 수 있어도 웬만한 코딩테스트는 합격할 수 있을 것입니다. 

 

level 2 부터는 무조건, 스스로 풀어야합니다. 시간을 1 ~ 2시간정도로 잡아두고, 문제 풀이를 시작합니다. 이 시간 동안에는 절대 남의 코드를 찾아보지 않기로 약속해야합니다. 계속 틀리고 고치고를 반복하다가, 기준 시간이 다 됐음에도 못풀겠을때, 그때 해당 문제를 검색해서 다른 사람의 풀이를 보면서 이해합니다. 이때 그 사람의 코드를 그대로 따라하면, 그건 그 문제를 푼게 아니라, 그냥 타이핑 연습하는 것이겠죠? 머리로 이해했다해도, 남의 코드를 그대로 적는건 기억에 남지 않습니다. 따라서 다른 사람의 코드를 이해만 하고, 다시 자신의 코드로 직접 문제를 푸는것이 핵심입니다. 절대로 조급해 하지마세요. 여러 부분을 얕게 아는 것보다, 하나를 정확히 아는것이 코딩테스트에 도움이 됩니다. 왜냐면 코딩테스트는 부분점수가 없기 때문이죠. 0점이나 90점이나 똑같이 fail입니다. 무조건 100점을 목표로 문제를 풀어야합니다.

 

level 2까지 모두 푸셨다면 여러분은 이미 합격권에 있을 확률이 높습니다. 하지만 naver, kakao 같은 IT 기업은 문제가 조금 더 어렵습니다. 따라서 level 3까지 도전해봐야 안정적으로 대부분의 코딩테스트를 합격할 수 있을 것입니다. level 3 부터는 아마 남의 코드를 봐도 어렵고 짜증날 수 있습니다. 하지만 한번 풀어놓으면, 해당 알고리즘을 사용하는 문제들은 그냥 껌씹듯이 풀 수 있을 것입니다. 조급해하지말고, 기출문제 풀려하지말고, 그냥 우선 코딩테스트 고득점 Kit 부터 정복하시길 추천드립니다. 

 

마무리

프로그래머스에서 고득점 Kit를 모두 정복하셨다면, 아마 대부분 기업의 코딩테스트에서 절반 이상은 맞출 수 있을 것입니다. 하지만 해당 사이트에 없는 알고리즘도 분명 나올 수 있습니다. 다음 포스팅에서는 코딩테스트 꿀팁과, 심화 알고리즘에 대해 소개하도록 하겠습니다. 개발자, 취준생 여러분 모두 응원하며 마무리하겠습니다. 감사합니다.

 

반응형

+ Recent posts