01. 코딩 테스트 개념과 배경
1. 코딩 테스트 개념과 배경
- 코딩 테스트 : '기업/기관에서 직원이나 연수생을 선발하기 위한 목적으로 시행되는 일종의 문제 풀이 시험'
- 개발 직군은 기본적으로 코딩 능력을 갖춰야 하므로 이전부터 코딩 테스트를 진행하는 기업이나 기관이 많이 있었음
- 공개채용을 하는 기업에서 응시자의 수를 효과적으로 줄이기 위한 방법으로 코딩 테스트를 이용하며 채용 과정의 효율성을 높이고 있음
- 기업이나 기관의 코딩 테스트가 늘어남에 따라 다양한 온라인 저지 사이트에서 코딩 테스트 문제를 푸는 사람들 또한 늘어나기 시작했음
☑ 온라인 저지 사이트란?
☞ OJ(Online Judge)라고도 하며 프로그래밍 대회나 코딩 테스트에서 나올 법한 문제를 시험해 보는 온라인 시스템
☞ 현재 많은 사이트가 운영되고 있음
<온라인 저지 사이트 참고>
- 코딩 테스트를 위한 온/오프라인 강의 또한 눈에 띄게 많아짐
→ 삼성전자가 2015년 하반기부터 소프트웨어 관련 직군은 SW 역량테스트를 시행한 것과 연관 지을 수 있음
→ 2016년에는 알파고가 등장해 바둑기사 이세돌을 이긴 뒤로 한동안 대한민국의 주요 키워드는 인공지능, 알고리즘, 코딩이었음
✎ AlphaGo : 구글의 딥마인드가 개발한 인공지능 바둑 프로그램
- 변화는 교육에서도 찾을 수 있음
→ 과거에는 학교에서 엑셀, 파워포인트처럼 프로그램을 활용하는 컴퓨터 활용 능력을 중심으로 가르쳤음
→ 2015년 개정 교육 과정부터는 정보 교과가 필수 과목으로 채택되어 활용 능력보다는 컴퓨팅 사고력을 강조하면서, 현실 세계의 다양한 문제를 어떻게 컴퓨터로 해결할 수 있는지를 교육하고 있음
- 실제로 초등학교와 중학교에서는 파이썬이나 스크래치 등을 정보 교과 시간에 배우고 있음
- IT 개발 직군의 취업 준비생이 아니어도 이러한 교육 과정과 취업 시장의 변화로 문제 해결 능력을 요구하는 알고리즘 문제를 푸는 사람들 또한 늘어나고 있음
2. 코딩 테스트의 유형
- 코딩 테스트는 크게 온라인 코딩 테스트와 오프라인 코딩 테스트로 구분됨
(1) 온라인 코딩 테스트
- 공채 과정에서 응시자가 많을 때 인터넷을 활용해 프로그래밍 역량을 평가하여 응시자를 선별하는데 사용함
- 보통 기업에서는 온라인 저지 시스템을 별도로 구축하여 제공하거나 백준 온라인 저지 혹은 프로그래머스 같은 온라인 저지 서비스에 문제를 출제한 뒤 응시자가 해당 시스템에 응시하도록 함
✎ 온라인 저지 서비스들은 정부나 기업의 요청에 따라서 코딩 테스트나 대회를 열곤 함
- 정해진 시간에 응시자가 사이트에 접속해 문제를 읽고 해답을 소스코드 형태로 작성하여 제출하면 온라인 저지 서비스가 정답 여부를 알려주고 점수를 부여함
✔ 보통 저지 시스템에서 연습할 때는 제출 횟수에 제한이 없으나, 실제 코딩 테스트에서는 횟수 제한이 있을 수 있으니 주의해야 함!!
- 한 가지 팁은 코딩 테스트 주제별로 차이가 있지만, 온라인 코딩 테스트는 타인과 문제 풀이를 공유하지 않는 선에서 인터넷 검색을 허용하는 경우가 많아서 오프라인 코딩 테스트에 비해 높은 성적을 받을 확률이 높음
→ 다만 명확한 규정은 안내 사항으로 명시하고 있으니 코딩 테스트 시작 전에 규칙과 주의 사항을 반드시 확인해야 함
- 대부분의 코딩 테스트나 알고리즘 대회에서는 테스트가 끝난 후에 참가자들이 제출한 소스코드를 대조하여 부정행위를 저지른 사람이 있는지 확인함
- 인터넷에서 참고할 만한 소스코드를 찾더라도 필요한 내용만 확인하여 이를 현재 풀고 있는 문제에 적용이 가능하도록 자신만의 소스코드로 표현하는 작성 능력도 중요함
- 온라인 IDE를 이용하는 경우 자동으로 소스코드가 공개 상태로 온라인에 배포되어 부정행위로 간주될 수 있음
∴ 온라인 IDE를 이용할 때는 소스코드가 공개 설정으로 되어 있는지 확인할 필요가 있음
(2) 오프라인 코딩 테스트
- 응시자가 시험장에 방문해서 치르는 시험을 의미함
- 대체로 인터넷 검색이 허용되지 않으며 회사에서 제공하는 컴퓨터 환경에서 바로 시험에 응시함
- 때에 따라 응시자가 자주 사용하는 소스코드를 가져올 수 있도록 허용하는 경우도 있으므로 기관이 규정하는 바에 맞게 테스트를 준비하면 됨
✎ 대회 혹은 코딩 테스트에 가져갈 수 있도록 허용하는 알고리즘 문제 풀이용 개인 코드 라이브러리를 통상적으로 팀 노트라고 부름
- 대체로 오프라인 테스트를 치를 때는 응시자가 많이 좁혀진 상태이므로 코딩 테스트를 본 뒤에는 별도의 면접실로 안내되어 화이트보드 혹은 종이와 함께 자신이 문제를 해결한 과정 등에 대해서 설명하기도 함
- 이 때 면접관과 함께 해당 문제에 대한 내용을 토론하며, 자신이 어떠한 알고리즘으로 문제에 접근하고 풀었는지를 설명하고 평가를 받음
3. 코딩 테스트 준비를 돕는 다양한 서비스
(1) 코드업
- https://codeup.kr/
- 국내의 한 정보 교사가 알고리즘 교육을 목적으로 운영하는 사이트
- 난이도가 낮은 문제가 많아 처음 공부하는 사람에게 적합
- 알고리즘을 잘 모르거나 이제 막 문제 풀이를 시작하려는 독자라면 코드업 사이트의 [문제] - [문제집]에서 [기초 100제]를 꼭 풀어보자
- 기초 100제는 알고리즘 문제 풀이에서 자주 사용하는 기본 코드 유형과 관련된 문제라서 이 유형을 제대로 학습하면 실전에서 문법이 떠오르지 않아 풀지 못하는 일은 적을 것
- 특히 코딩 테스트에서 많은 비중을 차지하는 구현 문제를 해결하는데 큰 도움이 됨
✎ 기초 100제는 대부분 구현문제로 구성되어 있음
- 난이도가 낮은 문제가 많고 문제 순서가 난이도 순서와 대체로 비례하므로 자신감을 얻으면서 다양한 유형을 빠르게 풀어보는데 적합
- 따라서 코딩 테스트 초보자는 코드업에서 경험을 쌓은 뒤에 백준 온라인 저지로 넘어가는 것을 추천
(2) 백준 온라인 저지
- https://www.acmicpc.net/
- 국내에서 가장 유명한 알고리즘 문제 풀이 사이트
- 어려운 문제부터 쉬운 문제까지 난이도가 다양
- 코딩 테스트 준비를 처음 시작하는 사람을 위한 단계별 문제 풀이도 제시하고 있음
- 가장 전형적인 코딩 테스트 형식(ACM-ICPC 형식)을 따르고 있음
- 국내 사용자가 많아서 사용자 간의 질문과 답변이 활발한 편
- 코드업과 다르게 문제 순서는 난이도와 무관하므로 순서대로 풀면 초보자 입장에서는 예상치 못한 난이도에 좌절할 수 있음
→ 그럴 때는 백준 온라인 저지 문제들에 대하여 알고리즘 분류 태그와 난이도를 부여하는 solved.ac 프로젝트의 도움을 받자
→ 크롬에서 solved.ac 확장 프로그램을 설치하면 백준 온라인 저지 문제에 대한 난이도 정보를 손쉽게 확인할 수 있음
- 백준 온라인 저지의 장점은 [문제] - [알고리즘 분류]탭으로 이동하면 유형별 알고리즘을 선택하여 풀 수 있다는 점
※ https://www.acmicpc.net/problem/tags
→ 이 방식은 한 유형씩 파고들며 공부하고 싶은 독자에게 유용
∴ 책을 읽으며 백준 온라인 저지에서 유형별 알고리즘을 찾아 풀어볼 것을 권장
- 삼성 SW 역량테스트 대비 문제집을 제공하고 있음
- 문제 복원도가 우수하므로 대기업 공채를 준비한다면 백준 온라인 저지의 문제를 풀어보는 것을 추천
(3) 프로그래머스
- https://school.programmers.co.kr/learn/challenges
- 국내 알고리즘 학습 사이트로 2017년부터 2020년 상반기까지의 카카오 공채 문제를 모두 제공하고 있음
- 다른 온라인 저지 사이트처럼 소스코드를 제출하면 정답 여부를 확인할 수 있음
- 재미있는 특징은 본인이 해당 문제를 풀지 못해도 다른 사람들의 풀이 코드를 열람할 수 있다는 점
→ 단, 본인이 해당 문제를 풀지 못한 상태에서 다른 사람의 풀이를 확인하려면 '알고리즘 점수'가 차감됨
→ 해당 문제를 해결했을 때는 '알고리즘 점수'를 차감하지 않고 공개된 소스코드를 확인할 수 있음
→ 소스코드는 공개여부를 스스로 결정할 수 있어 공개하지 않으면 다른 사용자가 볼 수 없음
- 카카오에 지원하거나 카카오의 문제 스타일을 확인하고 싶다면 이 사이트에 접속해서 문제를 반드시 풀어보자
→ 책을 통해 기초 개념을 잡고, 추가로 프로그래머스에서 문제를 풀어보자
(4) SW Expert Academy
- https://swexpertacademy.com/main/main.do
- 삼성에서 공식적으로 제공하고 있는 알고리즘 학습 사이트
- 삼성은 '상시 SW 역량테스트'제도를 운영하고 있는데 삼성 직원이 아니더라도 응시할 수 있음
- 학생들은 상시 SW 역량테스트를 치르면서 본인의 실력을 가늠할 수 있음
→ SW 역량테스트 중 가장 난이도가 낮은 A형에 응시해 보는 것을 추천
- 삼성전자의 경우 DFS/BFS를 활용해야 하는 탐색과 시뮬레이션 문제 유형을 자주 출제함
- 삼성전자 IT 직군의 공채에 등장하는 알고리즘 문제 유형도 상시 SW 역량테스트 A형 문제와 유사하게 출제되므로 상시 SW 역량테스트 A형을 응모해서 모의고사를 치르듯 실력을 확인하고 부족한 부분을 미리 확인해 볼 수 있음
→ A형을 통과하면 B형을 치를 자격이 주어짐
4. 어떤 언어가 코딩 테스트에 유리할까?
- 파이썬은 배우기 쉽고 읽고 쓰기 쉬워 초보자가 접근하기 좋은 프로그래밍 언어 중 하나
- 컴퓨터 관련 전공자 외에도 중고등학생이나 일반인이 프로그래밍을 배우는 일이 많아진 요즘 입문 언어로 파이썬을 가장 많이 선택함
- 파이썬은 활용도가 높아 기업이나 대학원, 연구소에서도 많이 사용
- 특히 파이썬은 풍부한 라이브러리로 인해 다양한 분야에서 많이 활용할 수 있으며 데이터 분석이나 인공지는 분야에서도 널리 사용하고 있음
- 2000년대까지만 하더라도 첫 프로그래밍을 C 언어로 시작하는 경우가 많아 알고리즘도 C 언어나 C++로 처음 공부하는 사람이 많았음
- 하지만 최근에는 처음 배우는 언어가 파이썬이나 자바스크립트 등의 언어로 바뀌면서 알고리즘을 공부할 때 선택하는 언어도 바뀌고 있음
- 최근 코딩 테스트 유형을 보면 변칙적이고 다양한 유형이 등장하고 있으므로 배우기도 쉽고 변칙적인 유형에 대응하기도 쉬운 ㅍ파이썬이 코딩 테스트에 유리하다고 봄
- 반면 실행 시간을 기준으로 보면 다른 언어에 비해 빠른 C/C++가 유리
- 삼성전자는 SW 역량테스트 B형부터는 파이썬을 배제하고 있음
✎ 삼성 SW 역량테스트는 A형을 통과해야 B형을, B형을 통과해야 C형을 치를 자격이 주어짐, 공채는 파이썬을 허용하고 있음, B형 이상을 치를 독자는 깃허브에서 제공하는 C/C++와 자바 코드를 활용해서 학습하길 권함
- 실행 시간을 기준으로 봤을 때 파이썬보다는 C/C++가 더 빠르게 동작하고 하드웨어에 더 가까운 언어이므로 C/C++로만 시험을 치르도록 강조하는 경우도 있음
- 또한 삼성 SW 역량테스트 B형과 C형은 C/C++의 필수 라이브러리를 제외한 대부분의 표준 라이브러리를 사용할 수 없어 기본 자료구조 모듈조차 모두 본인이 작성해야 함
- 물론 삼성 역량테스트 B형 이상과 같은 시험을 제외하고 대부분은 파이썬을 이용할 수 있으니 걱정하지 말자
- 코드포스나 앳코더 같은 알고리즘 대회 사이트에서 레이팅 점수가 높은 참가자를 확인해 보면 C++를 선택한 참가자가 많음
✎ https://atcoder.jp/
- 알고리즘 대회를 준비하는 학생이라면 C++를 선택하는 편이 더 좋을 수 있음
- C++를 공부하는 과정에서 컴퓨터의 내부 동작 구조까지 더 자세히 알 수 있으며 여러 산업에서 C++를 오래 사용한 만큼 인터넷에 참고할 양질의 자료도 많음
- 국제 알고리즘 대회 사이트에서는 사용자의 대회 성적을 토대로 레이팅 점수를 매기는데 레이팅 점수에 따라서 유저의 계정 색이 다름
☞ 즉 유저의 계정 색을 보면 해당 유저의 알고리즘 문제 해결 능력을 가늠할 수 있음
☞ 대부분의 알고리즘 대회 사이트에서는 최상위권 유저에게 빨간색을 부여함
☞ 코드포스나 앳코더 같은 사이트에서는 레드 코더의 비율이 상위 1% 미만이 되도록 레이팅 시스템을 구성함
☞ 어느 사이트를 가도 대체로 약속이나 한 듯 최고 등급인 빨강을 달성한 소위 '레드 코더'들은 대부분 C/C++를 사용함
- 파이썬은 C++나 자바에 비해 코드가 짧고 직관적으로 문제를 풀 수 있음
- 또한 몇 몇 알고리즘을 구현할 때는 라이브러리를 추가할 필요 없이 소스코들를 작성할 수 있음
- 게다가 파이썬의 기본 자료형이 제공하는 기능이 매우 강력해 표준 라이브러리나 추가 외부 라이브러리를 적게 사용하는 편
- 파이썬은 문자열 처리가 다른 언어에 비해서 매우 간결하고 쉬운데 이는 구현 위주의 문제에서 다욱 빛을 발한다
- 이런 점을 고려할 때 필자는 점점 C++나 자바보다 파이썬 응시자의 비중이 더 높아지리라 예상함
→ 실제로 2019년의 응시자를 분석하면 최근 3년간 파이썬을 이용한 응시자가 급격히 증가했음
- 이와 관련해서 IT 직군의 취업 준비생부터 4년 미만의 경력자 50명을 대상으로 설문조사를 진행했을 때 먼저 '알고리즘 문제 풀이 방식의 코딩 테스트에서 가장 유리한 프로그래밍 언어'를 설문 조사한 결과는 다음과 같음
→ 44% 사람들이 C++를 가장 유리한 언어로 선택했음 36%를 차지한 파이썬이 그다음으로 나타났음
→ 설문으로도 파이썬이 알고리즘 문제 풀이 방식의 코딩 테스트에서 주로 선택하는 언어로 자리매김하고 있다는 사실을 확인할 수 있음
- 실행 시간이나 메모리 관리가 매우 중요한 문제 유형이 아닌 이상 웬만한 문제는 파이썬을 사용하면 짧은 코드로 표준 라이브러리만 활용하여 프로그래밍할 수 있기 때문
- 더불어 채점 시스템이 파이썬3뿐만 아니라 PyPy3를 지원한다면 대체로 코드가 더 빠르게 실행됨
✎ 참고로 PyPy는 때때로 C 언어보다 빠르게 동작함, 하지만 어떤 상황에서는 일반 파이썬보다 느리게 동작하는 경우도 있기 때문에 유의해서 사용, 문제를 푸는 입장에서 컴파일러의 동작까지 유추하는 것은 어려움, 그래서 통상적으로는 아슬아슬하게 시간 초과 판정을 받는 경우 파이썬3로 제출했던 코드를 Pypy3로 변경해서 제출하거나 그 반대로 시도해보는 것이 일반적
- 파이썬은 다른 언어에 비해서 큰 숫자, 리스트, 문자열을 처리하는 데 있어서 매우 편리한 기능을 기본으로 내장하고 있음
→ 따라서 통상적인 기업 코딩 테스트 난이도의 기본 알고리즘 문제 풀이에는 파이썬이 유리하다는 인식이 있음
- 알고리즘 문제 풀이 방식이 아닌 프로그램 개발 방식의 코딩 테스트에서 가장 유리한 프로그래밍 언어는 무엇일까? 이에 대한 설문 조사도 진행 했으며 그 결과는 다음과 같음
→ 파이썬이 36%로 높은 비중을 차지했음
- 파이썬은 풍부한 라이브러리를 적절히 활용해 다양한 프로그램 개발이 가능함
- 카카오 같은 기업의 공채 과정에서는 프로그램 개발 방식의 문제도 출제되고 있음
→ 파이썬을 기본 언어로 선택하여 공부한다면 상대적으로 수월하게 다양한 문제 상황에 대응하여 문제를 풀 수 있으리라 예상됨
- 많은 상황에서 파이썬이 다른 언어에 비해 짧은 코드로 필요한 기능을 구현할 수 있기 때문에 다른 언어를 주 언어로 코딩 테스트를 치르는 사람들도 최근에는 파이썬이 더 유리하다고 느끼기 때문에 이러한 설문 조사 결과가 나온 것으로 예상됨
- 이미 알고리즘 대회를 준비해 본 경험이 있거나 자신만의 팀 노트를 가지고 있는 사람이라면 원래 이용하던 언어를 사용해서 코딩 테스트를 치르는 편이 유리
- 반면에 코딩 테스트를 처음 시작하거나 알고리즘 문제 풀이에 익숙하지 않다면 주저하지 말고 파이썬을 사용해보라고 필자는 추천
→ 최근 코딩 테스트의 출제 경향은 파이썬 사용자들에게 유리한 경우가 매우 많음
<reference(참조)>
나동빈(2020).<이것이 취업을 위한 코딩 테스트다 with 파이썬>.서울: 한빛미디어(주)