알고리즘 뿌셔

알린이를 위한 알고리즘 및 코딩테스트 입문 정보

데브티치 2021. 7. 23. 17:03

이 글엔 알고리즘 공부, 코딩테스트를 공부하고자 하는 알린이들을 위한 정보가 있습니다.

 

개발자로 취업을 하고자 한다면 거의 모든 기업(요즘은 공기업까지도)에 있는 코딩테스트 관문을 통과해야 면접의 기회가 주어집니다. 저 역시도 1년 전에는 코딩테스트가 무서워 일부러 코테 없는 전형을 골라서 지원하기도 했었습니다. 그러나 싸피를 계기로 알고리즘과 친해지고 공부를 꾸준히 한 결과 이제는 코테를 통과하는 기쁨을 누릴 수 있게 되었습니다. 알린이에서 이제는 1일1알고를 풀고 있는 입장에서 공부를 시작하는 입장에서 알아두면 좋을 것 같은 정보를 적어보았습니다.

1. 코테 용어

코테를 풀면서 알아두면 좋은 용어입니다. 알골을 푸는 사람들과의 지적 대화를 위한 얕은 용어 지식입니다.

테케
테스트 케이스의 줄임말로 알고리즘 문제에는 보통 문제와 이를 테스트 할 수 있는 테케가 주어지게 됩니다. 테케의 입력을 내 코드에 입력했을 때 해당하는 테케의 출력이 나오는 것을 보고 알고리즘이 잘 짜여졌는지 판단하게 됩니다.

ex) A+B를 구하는 알고리즘 문제
입력 : 1 2
출력 : 3
히든테케 / 반례
알고리즘을 구현하는 코드를 짜고 문제에서 주어진 테스트 케이스를 통과해도 문제를 제출하면 '틀렸습니다'를 받게 될 수도 있습니다. 이 경우 주어진 테케에서는 파악할 수 없는 히든 테케가 존재하여 틀린것으로 일반적으로 테케를 위주로 코드를 짜게 된다면 히든테케를 통과하지 못해 뒷통수를 맞게되는 경우가 있습니다. '테케학'(실제로 존재하는 학문이 아닙니다)을 통해 알고리즘을 검증하는 능력을 키워야 실제 테스트에서도 통과할 확률이 많습니다.

코테가 끝나고 단톡방에서 흔히 등장하는 용어입니다. solved의 줄임말로 내가 몇 문제를 풀었는지를 나타내는 말입니다. 0.5솔 같은 경우 정확도, 효율성을 모두 측정하는 코테의 경우 정확도는 모두 맞췄지만 효율성이 꽝일때 쓰기도 합니다. 또는 일부 테케만 맞춘 것 같을 때 쓰기도 합니다.

ex) 님들 몇솔했음? (너희들은 몇문제를 풀었니?)
저는 3솔 (3문제를 풀었다)
이번에 3솔컷인듯? (3문제는 풀어야 이번 코테 통과인듯)
시초
시간 초과의 줄임말로 내 알고리즘의 수행속도가 문제에서 주어진 시간안에 수행되지 못함을 말합니다. 시간초과가 났다면 내 알고리즘이 for문을 남발하고 있지는 않은지 완전 탐색보다 더 좋은 알고리즘이 있는지 생각해봐야 합니다.

cf) 비슷한 경우로 메모리 초과가 있습니다. (재귀로 풀면 흔히 발생합니다.)
맞왜틀
"맞는데 왜 틀리지"의 줄임말로 나는 완벽한 알고리즘으로 맞게 풀었다고 생각했는데 틀렸습니다 크리티컬을 받게 되는 경우입니다. 하지만 당신이 틀렸습니다. 컴퓨터는 틀리지 않으니까요 높은 확률로 당신의 알고리즘에 문제가 있을 가능성이 있습니다.(간혹 테스트 데이터의 문제로 틀왜맞이 발생하기도 하고 진짜 맞왜틀이 있을수도 있습니다.)

 

이외의 유익한 용어들이 있다면 댓글로 달아주세요~

 

2. 프로그래밍 언어

코딩테스트로 많이 사용되는 언어에는 대표적으로 C++, Python, Java가 있습니다. 이 외에도 코딩테스트마다 다르지만 대부분 C, C++, C#, Go, Java, JavaScript, Kotlin, Python2, Python3, Ruby, Scala, Swift 이정도의 언어를 지원해줍니다. 그리고 SQL 문제가 있는 경우 Oracle과 MySQL 정도 지원을 합니다.

 

- 코딩테스트에 유리한 언어가 있나요?

네 있습니다. 알고리즘 대회용으로는 C++을 많이 사용합니다. 속도 측면에 있어서 제일 빠르기 때문입니다. 그러나 코딩테스트용으로는 Python을 많이 사용합니다. 다른 언어와 비교했을 때 배우기 쉬울 뿐만 아니라 문자열 처리, 기본 순열 조합 함수 등 시간 내에 풀어야 하는 코테에 유리한 언어임에는 분명합니다.

그럼에도 불구하고 프로그래밍 언어는 아이디어를 구현하는 도구에 불과하므로 본인에게 유리하고 익숙한 언어를 선택하여 시험을 보는게 좋다고 생각합니다. (저도 Java를 이용해서 주로 알고리즘을 풀고 있습니다)

 

3. 문제 풀이 사이트

알고리즘을 풀이 할 수 있는 다양한 문제 풀이 사이트가 있습니다.

많이 사용하는 몇개의 사이트에 대해서 소개하겠습니다.

 

  • Baekjoon Online Judge

백준 온라인 저지 (BOJ) 입니다. 최백준님이 만든 알고리즘 문제 풀이 사이트이며 문제가 상당히 많습니다. 각종 알고리즘 대회에 나온 문제부터 기본적인 문제까지 다양한 난이도의 문제들이 있습니다. 그룹을 만들어서 알고리즘 스터디를 할 수도 있고, 원하는 문제들을 모아서 문제집을 만들어서 공부할 수도 있습니다.

https://www.acmicpc.net/

 

Baekjoon Online Judge

Baekjoon Online Judge 프로그래밍 문제를 풀고 온라인으로 채점받을 수 있는 곳입니다.

www.acmicpc.net

 

  • 프로그래머스

코딩테스트 플랫폼으로도 많이 사용되는 프로그래머스입니다. 아마도 이 플랫폼의 등장으로 많은 기업에서 코테를 용이하게 도입하게 되었지 않나 생각합니다. 백준은 코드 내에서 input을 처리해야하지만 프로그래머스는 solution()이라는 함수의 인자값으로 줍니다. 그렇기 때문에 백준으로만 연습하다보면 프로그래머스의 알고리즘이 다소 생소할 수 있으니 백준으로 실력을 쌓고 프로그래머스로 테스트 해보시는것을 추천드립니다. 또한 카카오 코테와 같은 문제들이 공개 되어 있고 요즘 많이 등장하는 과제 테스트에 대한 문제들도 체험할 수 있습니다.

프로그래머스

 

프로그래머스

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

programmers.co.kr

 

  • SW Expert Academy(SWEA)

삼성에서 하는 SW 역량 테스트와 관련된 문제 풀이 사이트입니다. 백준과 유사한 사이트입니다. 문제의 난이도가 D1(쉬운순) 부터 어려워질수록 숫자가 커집니다. 삼성 코딩테스트의 기출이나 다양한 알고리즘 문제를 접할 수 있습니다. 출력 형식이 정해져 있으므로 제출할 때 출력 형식을 맞추는 것에 유의해야합니다. 정답률의 경우 싸피에서 문제를 풀면서 올려놓은 경향이 있는 것 같아서 백준에 비해서는 유의미하지는 않은 것 같습니다.

SW Expert Academy

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

  • 정올

정보올림피아드를 준비하는 사람들이 많이 사용하고 일반적으로는 정올문제가 백준에도 있기 때문에 싸피 초반에 종종 풀고 그다음부터는 별로 사용하지는 않았습니다. 그도 그럴것이 개인적으로는 채점 시간이 너무 오래 걸린다고 생각합니다.

JUNGOL

 

JUNGOL

 

www.jungol.co.kr

 

  • LeetCode

외국 알고리즘 사이트 입니다. 저는 주로 SQL 문제를 연습하기 위해서 많이 사용했습니다. 대기업의 수시채용 또는 요기요와 같은 회사는 영어로 문제를 내고 풀게끔 하기 때문에 영어로 코딩테스트를 연습하는 것도 괜찮은 방법이라고 생각합니다.

LeetCode - The World's Leading Online Programming Learning Platform

 

LeetCode - The World's Leading Online Programming Learning Platform

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

  • Codility

릿코드와 비슷한 영어 알고리즘 사이트입니다. Lessons에서 기본적인 알고리즘 문제와 자료구조 등을 배울 수 있어서 좋습니다.

Programming Online Training In Coding Skills | Codility - Codility

 

Programming Online Training In Coding Skills | Codility - Codility

Find longest sequence of zeros in binary representation of an integer.

app.codility.com

 

4. 레벨

백준에서 solved.ac 를 지원함에 따라서 문제 풀기 전에 백준 문제의 난이도를 대략적으로 파악할 수 있습니다. 보통 코딩테스트에서는 실버 5 - 골드 3 사이의 문제가 나오는 것 같습니다. 레벨은 브론즈 5부터 루비 1까지 있습니다.

solved.ac

 

solved.ac

우리 모두가 만들어가는알고리즘 문제해결 학습의 이정표 solved.ac는 Baekjoon Online Judge 문제들에 태그와 난이도를 붙이는 커뮤니티 프로젝트입니다. 현재 12,413개 문제에 난이도 정보를 제공하고

solved.ac

그리고 백준과 연동이 되어 있어서 백준의 문제를 풀면 해당하는 문제의 난이도에 따라 경험치가 쌓이게 되고 브론즈에서 실버, 골드, 플래티넘으로 본인의 레벨을 올려가는 재미가 있습니다.

 

저는 현재 골드 4에 클래스 3입니다.

클래스는 solved.ac에서 클래스 별로 선별한 문제들로 해당 클래스에 있는 문제들을 풀면 클래스를 획득할 수 있습니다.

 

 

이상으로 알아두면 쓸데있는 알고리즘 및 코딩테스트 정보였습니다.