컴퓨터/알고리즘

알고리즘 문제 풀이 순서, 공부 방법 (2) - 전공자/문제풀이 초보

우유식빵 2024. 3. 25. 01:25

지난 글에서는 알고리즘 문제 풀이 공부 방법에 대해서

비전공자/문제풀이 처음이신 분들을 기준으로 

어떤 문제들로 시작해서 문제풀이를 해보면 좋을지,

문제 풀이 시간과 문제 수에 대해 간단하게 작성했다
(이전글) https://waytocse.tistory.com/114

 

알고리즘 문제 풀이 순서, 공부 방법 (1) - 비전공자/문제풀이 처음

SSAFY멘토링을 진행하면서 많은 분들이 '비전공자로서 문제풀이 로드맵', '공부 방법 혹은 순서', '공부하는 법'을 궁금해한다는 것을 알게 됐다. 전공자도 처음 시작한다면 그러하겠지만 비전공

waytocse.tistory.com

 

이번 글에서는 전공자이거나 문제 풀이 경험이 적은 분들에 대해서 

코딩테스트 대비 알고리즘 문제 풀이를 공부하는 방법에 대해서 글을 써보고자한다.

다음에는 문제풀이를 꽤 해봤으며 어느 정도 자신의 수준을 아는 사람이

어떻게 공부하면 좋을지, 코딩 테스트 준비와 CS면접준비를 어떻게 하는게 좋을지 작성해볼까한다. 

 

목차

  1. 알고리즘 공부 방법

   1-1. 비전공자이거나 문제풀이가 처음인 분

    1-2. 전공자이거나 문제풀이 경험이 적은 분

    1-3. 문제풀이를 꽤 해봤으며 어느 정도 자신의 수준을 아는 분

  2. 알고리즘 문제풀이 재미있게 하는 법

 

   1. 알고리즘  문제 풀이 공부 방법


전과 같이 소개할 사이트 주소 미리 써놓음

 

   1-2. 전공자이거나 문제 풀이 경험이 적은 분 


코딩테스트를 준비하기 위해서 어떤 문제를 풀어볼까? 에 대해 감이 안올 수 있다.

그런 경우 [프로그래머스 > 코딩테스트 > 알고리즘 고득점 kit]를 먼저 추천한다.

프로그래머스 > 코딩테스트 > 알고리즘 고득점 kit

코딩테스트에 있어서 필수적인 알고리즘들로 구성된 문제들이기 때문에

이런게 코딩테스트에 나오는 구나... 하고 감을 잡기 좋다.

각 분류별로 모든 문제들을 풀어서 기본적인 알고리즘들에 대한 감을 익혀보는 것을 추천한다.

 

여기서 문제들을 풀어본다음에 [백준 > 문제 > 알고리즘별 분류]에 들어간다.

백준 > 문제 > 알고리즘별 분류

 

고득점 kit에서 어려웠던 알고리즘 분류를 중심으로 시작해보고, 만약 다 괜찮았다면

[배열, 연결리스트, 스택, 큐, 덱, 깊이 우선 탐색, 너비 우선 탐색, 그래프, 백트랙킹, 시뮬레이션, 다이나믹 프로그래밍(동적계획법), 그리디 알고리즘(탐욕법), 문자열, 브루트포스 알고리즘(완전탐색), 이분 탐색, 투 포인터, 세그먼트 트리, 트리, 최단 경로, 분할 정복, 트라이, 플로이드 와샬, 최소 신장 트리] 에 해당하는 알고리즘 분류로 들어가서 문제를 풀어보면 된다. (좀 많다)

 

 

이제 예를 들어, "너비 우선 탐색"이라는 알고리즘 분류로 들어가면 다음과 같이 문제들이 나타난다.

알고리즘 분류 > 너비 우선 탐색

이때 고려해서 볼 것은 맞힌 사람 수나 제출 수, 그리고 문제 난이도이다.

맞힌 사람, 혹은 제출 수가 많은 것은 그만큼 대표적인 문제라는 의미이다.

그래서 그 수가 많은 문제를 중심으로 풀어보는 것도 하나의 방법이다.

 

위 이미지처럼 문제 난이도가 보이지 않는 사람은 옵션에 들어가서 solved.ac 티어 옵션 포함을 누르면 된다.

solved.ac 티어 옵션 선택하기

처음에 풀 때는 브론즈 ~ 실버 문제들부터 도전을 해보고 그런 난이도가 쉽거나 

선택한 알고리즘에 익숙해지고 감이 온다면 골드문제를 풀어보면 된다.

 

하지만 여전히. 저 많은 알고리즘 분류들중에 뭐부터 풀어야할지, 혹은

저 많은 문제들 중에 어떤 문제부터 풀지 감이 오지 않는 사람이 있을 수 있다.

 

그런 경우 추천하는 방법은 (1)편에서 추천했던것과 마찬가지로 백준과 연동되어있는

solved.ac사이트에가서 [문제 > Class]로 들어간다. 

 

solved.ac > 문제 > class

여기서 Class 3, Class4 문제들을 먼저 풀어보고, 풀 때는 기본과 + (에센셜) 목록에 있는 문제들을 모두 풀어보는 것을 추천한다.

그런데 이 많은 Class문제들 중에서도 어떤 문제를 먼저 도전할지 고민이 된다면

  • STANDARD가 붙어있는 문제들을 먼저 풀어보기
  • 난이도(solved.ac티어)순으로 문제를 풀어보기
  • 문제의 알고리즘 확인 후 자신이 어려워했던 알고리즘 우선 정복해보기 

중에서 골라서 도전해보면 될 것 같다.

 

만약 알고리즘 분류에따라 문제를 풀지 않고 class에 있는 문제들을 풀어보고 있는데,

해당 알고리즘 문제들이 어렵다면 다시 [백준 > 문제 > 알고리즘별 분류]로 들어가서 해당 알고리즘 분류에 있는

문제 목록을 확인하여 난이도가 낮은 것부터 풀어보면서 해당 알고리즘에 대한 감을 먼저 잡아보자.

 

예를들어 내 경우 세그먼트 트리가 그렇게 감이 안왔었는데, 

알고리즘별 분류로 들어가서 가장 낮은 난이도부터 시작해서 플래티넘 문제까지 풀수있을때까지

해당 알고리즘 감이 잡힐때까지 물고 늘어졌던 기억이 난다.

이렇게 했을 때의 장점은, 해당 알고리즘에 대해 정복했다는 자신감이 찬다는것....

 

추천하는 문제 풀이 시간 분배나 풀이 개수는 하루에 2~3시간 문제풀이를 하거나

실버 난이도 문제를 푸는 경우 하루에 4~5문제 정도 (가능하면 5문제 이상)

골드 난이도 문제를 푼다면 하루에 2문제 정도 (가능하다면 2문제 이상.. 근데 어려울 수 있다)이다.

 

문제가 안풀리거나 도저히 푸는 방법을 모르겠을 때에는 문제의 질문 게시판을 참고하고

여전히 감이 안온다면 구글에 검색해서 다른 사람의 풀이를 참고하자.

 

문제의 알고리즘에 대한 감이 안잡힌 상태일 수도 있고 아이디어가 안떠오르는 경우일 수도 있다.

초반 몇 문제는 이렇게 하며 풀이에 대한 감을 익히되, 뒤로 갈 수록 혼자 고민하는 시간을 늘려본다면 

확실히 성장하는것이 느껴질수있다. 시간은 오래걸리겠지만.

 

 

사실 1편부터 2편까지 3줄 요약을 해보자면

1) 단계별로 문제 풀기

2) 알고리즘별로 문제 풀기
3) solved.ac class별로 문제 풀기

 

인데, 그걸 풀어서 써본셈이다.

다음 편에서는 이제 어느정도 문제풀이가 익숙해진 상태에서

취업을 준비하기위한 코테준비나 CS준비는 어떻게 하면 될지에 대해 써보고싶다.