[코딩 테스트 합격자 되기] 취준생을 위한 코테 준비 요약 (언어 선택, 문제 분석, 의사 코드 설계)

코딩 테스트를 효율적으로 준비하는 과정을 알아보겠습니다. 책을 공부하면서 다음 과정을 잘 준비한다면 테스트에서 충분히 좋은 결과를 얻을 수 있을 겁니다.

언어 선택하기, 문제 분석 연습하기, 의사 코드로 설계하는 연습하기를 요약했습니다.

 

1. 언어 선택하기

결론부터 말하자면 언어는 코딩 테스트에서 그렇게 중요한 요소는 아닙니다. 자신이 가장 잘할 수 있는 언어를 고르면 되죠. 코딩 테스트 풀이 코드 대부분은 길이가 길지 않습니다. 또, 특정 언어의 문법을 활용하는 경우도 거의 없죠. 언어를 활용할 때는 다음 내용만 기억하면 됩니다.

  • 변수 선언하기
  • 함수 정의하기
  • 컨테이너 자료형 다루기
  • 조건문, 반복문 사용하기

이 정도만 사용하면 문제를 푸는 데 큰 지장이 없습니다. 다만 저는 여러분이 특정 언어에 자신 있는 것이 아니라면 가급적 파이썬을 사용하라고 추천하고 싶습니다. 왜냐하면 파이썬은 많은 사람이 사용하는 언어이기 때문입니다. 많은 사람이 사용하는 언어이므로 인터넷에 참고하기 좋은 자료가 많다는 게 파이썬의 큰 장점입니다. 또, 리스트, 셋 같은 강력한 자료구조를 언어에서 기본 제공하고 있어 작성해야 하는 코드의 길이가 다른 언어에 비해 짧고, 가독성이 좋다는 장점도 있습니다.

 

2. 문제 분석 연습하기

여러분이 코딩 테스트를 처음 준비한다면 ‘코딩 테스트’라는 단어가 주는 느낌 때문에 코딩 시험이라 생각하기 쉽습니다. 하지만 코딩 테스트는 코딩 능력이 아니라 문제 풀이 능력을 확인하는 것이 핵심입니다.

 

 

그래서 무작정 코드를 작성하기보다는 문제 분석에도 시간을 충분히 사용해야 합니다. 대부분 2시간에서 4시간 정도 문제 풀 시간을 주므로 전체 시간의 50~60% 정도는 문제 분석에 시간을 쓰는 것이 좋습니다. 그럼 문제는 어떻게 분석하는 것이 좋을까요?

 

첫 번째, 문제를 쪼개서 분석하라

문제 분석 단계에서는 문제 전체를 한번에 분석하는 것보다 문제를 동작 단위로 쪼개서 분석하는 것이 유리합니다. 한번에 생각해야 하는 양을 줄이면 문제에 좀 더 유연하게 접근할 수 있습니다.

 

두 번째, 제약 사항을 파악하고 테스트 케이스를 추가하라

문제에는 보통 제약 사항이 있습니다. 제약 사항을 정리해두고 이를 고려해서 테스트 케이스를 추가하는 연습을 하는게 좋습니다. 이 과정은 어떤 알고리즘을 사용할지 고민할 때 유용하고, 추후 코드를 구현하는 단계에서 예외를 거를 때 도움이 됩니다.

 

세 번째, 입력값을 분석하라

보통 알고리즘의 시간 복잡도는 입력값이 결정하는 경우가 많습니다. 입력값의 크기를 확인하면 문제를 제한시간 내에 풀 수 있는 알고리즘과 그렇지 않은 알고리즘을 미리 걸러낼 수 있죠. 예를들어 입력 데이터가 100만 개라면 O(N2) 알고리즘으로는 맞는 코드를 작성해도 시간 내에 출력값이 나오지 않으므로 테스트를 통과할 수 없습니다. 그러니 구현 전에는 반드시 입력값을 분석하기 바랍니다.

※ 시간 복잡도 관련 내용은 ‘3장 알고리즘의 효율 분석’에서 다루도록 하겠습니다.

 

네 번째, 핵심 키워드를 파악하라

코딩 테스트 공부를 많이 한 사람들은 문제를 빨리 해석합니다. 문제를 빨리 해석할 수 있는 이유는 문제의 핵심 키워드를 빨리 파악하기 때문입니다. 물론 ‘문제의 핵심 키워드가 A이면 무조건 a-1 알고리즘을 적용하라’는 것은 아닙니다. 하지만 핵심 키워드는 곧 특정 알고리즘을 암시하는 경우가 많고, 핵심 키워드를 파악하면 좀 더 빠르게 문제를 파악하고 좋은 알고리즘을 선택해 코드를 작성할 수 있으므로 이 연습도 해두면 좋습니다. 몇 가지 예를 들어 볼까요?

 

핵심 키워드에 따른 알고리즘 선택 방법

만약 ‘최적의 해’라는 키워드가 있다면 너비 우선 탐색 알고리즘을 고려하는 게 좋습니다. 왜냐하면 너비 우선 탐색 알고리즘 목적 자체가 최적의 해를 구하려는 것이기 때문이죠. 또, ‘정렬된 상태의 데이터’라는 키워드가 있으면 이진 탐색이나, 파라메트릭 탐색(Parametric Search) 알고리즘을 고민해보는 것이 좋고, ‘최단 경로’라는 키워드가 있다면 다익스트라, 벨만-포드, 플로이드-워셜 알고리즘을 고민해보는 것이 좋습니다. 다음 표는 문제를 분석할 때 참고하면 좋을 키워드 및 상황을 정리한 것입니다.

 

 

다섯 번째, 데이터 흐름이나 구성을 파악하라

데이터 흐름이나 구성을 파악하는 것도 중요합니다. 만약 데이터의 삽입과 삭제가 빈번하게 일어날 것 같다면 힙(Heap) 자료구조를 고려하는 게 좋습니다. 데이터가 50개 미만이고 입력값을 깔끔하게 정리하기 어렵다면 하드 코딩을 고려하기도 합니다. 또, 데이터 간의 격차가 크면 데이터값 자체를 인덱스로 활용하는 건 피하는 게 좋습니다. 예를 들어 {1, 10100, 5000}으로 데이터가 구성되어 있으면 데이터값을 인덱스로 썼을 때 2~4999, 5001~10099의 공간은 사용하지 않는 공간이지만 메모리에 할당하게 되므로 낭비입니다.

 

3. 의사 코드로 설계하는 연습하기

문제 분석을 끝낸 다음에는 분석 내용을 바탕으로 전체적인 코드를 설계해야 합니다. 구현은 그다음이죠. 코딩 테스트에서 설계의 의미는 의사 코드(Pseudo Code)를 작성하라는 것입니다. 의사 코드는 프로그램의 논리를 설명하고 알고리즘을 표현하기 위해 작성한 일종의 지침이라 보면 됩니다. 보통은 다음과 같은 원칙에 따라 의사 코드를 작성합니다.

  • 원칙 1 : 프로그래밍 언어로 작성하면 안 됨
  • 원칙 2 : 일반인도 이해할 수 있는 자연어로 작성해야 함
  • 원칙 3 : 일정한 형식이 없음(자유롭게 작성)

의사 코드를 작성할 때 여러분이 얻을 수 있는 이점은 실제 구현 단계가 아닌 추상 단계에서 설계를 진행할 수 있으므로 설계 아이디어에 좀 더 집중할 수 있고, 구현 단계 이후 코드를 수정하면 시간이 많이 들지만 추상 단계에서 의사 코드를 수정하는 건 비교적 수정 시간이 더 짧아 시간에서도 큰 이득을 볼 수 있다는 것입니다. 그러면 의사 코드를 작성하는 방법을 알아보겠습니다.

 

첫 번째, 세부 구현이 아닌 동작 중심으로 작성하라

의사 코드는 동작 중심으로 작성하는 것이 중요합니다. 가끔 의사 코드를 작성할 때 세부 구현을 고민하는 사람이 많습니다. 하지만 세부 구현을 고민하는 순간부터 의사 코드는 설계가 아닌 구현이 주 목표가 됩니다. 이러면 의사 코드를 작성하는 장점이 사라지죠. 예를 들어서 성적 관리 프로그램을 만든다고 가정해봅시다. 성적을 입력받는 부분을 의사 코드로 작성한다고 하면 다음과 같이 작성하면 됩니다.

  • 국어, 영어, 수학 점수를 입력 받는다.

가끔 다음과 같이 세부 구현을 고려하여 의사 코드를 작성하는 사람이 있습니다.

  • 크기가 256 바이트인 문자열 배열을 3개 선언해서 표준 입력*으로 국어, 영어, 수학 점수를 입 력받는다.

하지만 이런 식으로 실제 프로그래밍 요소*는 의사 코드에서 추가하면 안 됩니다. 의사 코드를 작성할 때 주의하기 바랍니다.

 

두 번째, 문제 해결 순서로 작성하라

의사 코드가 완성되면 이를 토대로 코드를 구현할 것이므로 의사 코드는 문제 해결 순서대로 작성해야 합니다. 또 의사 코드 자체는 실제 구현할 코드의 주석이 되기도 하므로 이렇게 순서대로 작성하면 나중에 자신의 코드를 분석하기에도 상당히 용이합니다. 예를 들어 영어 점수를 입력받아 60점 기준으로 통과, 실패를 판별하는 의사 코드는 다음과 같이 작성하면 됩니다.

  1. 영어 성적 입력
  2. 영어 성적이 60점을 넘는지 확인(분기)2.1 60점 이상이면 통과2.2 60점 미만이면 실패

 

세 번째, 충분히 테스트하라

구현전 마지막 단계는 충분히 테스트하라는 것입니다. 구현 단계로 갈수록 잘못된 부분을 수정하는 데 드는 비용은 점점 커지므로 의사 코드가 미리 생각해본 테스트 케이스를 통과할 수 있을지를 고민해봐야 합니다. 충분한 고민 후에 의사 코드가 대부분의 테스트 케이스를 통과할 수 있을 것 같을 때 구현을 시작하면 됩니다. 이런 모든 과정을 어떻게 연습할 수 있을까요? 바로 이 책에서 할수 있습니다. 그럼 이제 본격적인 코딩 테스트 공부를 시작해봅시다.

자료구조, 알고리즘, 빈출 100 문제로 대비하는 코테 풀 패키지

[되기] 코딩 테스트 합격자 되기(파이썬 편)

저자 박경록

매일 퇴근과 점심 메뉴를 고민하는 9년차 시스템 S/W 개발자입니다. 수학, 알고리즘 같은 실생활과 가깝고도 먼 학문을 좋아하고, 명확하지만 개선 여지가 있는 문제들에 대해 논의하고 사고를 개선해 나가는 과정을 좋아합니다.

Leave a Reply

©2020 GoldenRabbit. All rights reserved.
상호명 : 골든래빗 주식회사
(04051) 서울특별시 마포구 양화로 186, 5층 512호, 514호 (동교동, LC타워)
TEL : 0505-398-0505 / FAX : 0505-537-0505
대표이사 : 최현우
사업자등록번호 : 475-87-01581
통신판매업신고 : 2023-서울마포-2391호
master@goldenrabbit.co.kr
개인정보처리방침
배송/반품/환불/교환 안내