핵심 키워드 : 배열, 문자열, 반복문과 재귀함수, 계산복잡도, 정렬, 완전탐색, 정수론
문제번호 | 주제 | 문제제목 | 공부포인트 |
---|---|---|---|
2557 | 입출력 | Hello World | 일단 맞으면 기분 좋음 |
10869 | 입출력 | 사칙연산 | /, //의 차이는? |
2588 | 입출력 | 곱셈 | 자료형, 자릿수별 출력 |
2753 | 조건문 | 윤년 | if else |
10871 | 반복문 | X보다 작은 수 | 반복문(end와sep은 덤) |
8958 | 배열 | OX퀴즈 | 인덱스 , 이중for문 |
4344 | 배열 | 평균은넘겠지 | 소수점 출력 |
11654 | 문자열 | 아스키 코드 | 아스키 코드는 든든한 국밥 |
1152 | 문자열 | 단어의 개수 | split, remove |
2869 | 수학 | 달팽이는 올라가고싶다 | 나는 집 가고 싶다(import math) |
1978 | 수학 | 소수 찾기 | 컴퓨팅 사고 |
10872 | 재귀함수 | 팩토리얼 | 공포의 재귀 시작 |
1914 | 재귀함수 | 하노이 탑 | print를 어디에 둘까? |
9663 | 재귀함수 | N-Queen | 방문한 지역 체크, 재귀 |
2750 | 정렬 | 수 정렬하기 | 뭐야 쉽네(지옥의 3연벙 시작) |
2751 | 정렬 | 수 정렬하기2 | 어? 시간초과?(sys.stdin.readline) |
10989 | 정렬 | 수 정렬하기3 | 어? 메모리초과?(도수정렬) |
1181 | 정렬 | 단어 정렬 | 글자 크기 순 정렬, 중복제거 |
2390 | 완전탐색 | 일곱 난쟁이 | permutation, combination |
10819 | 완전탐색 | 차이를 최대로 | max, abs, itertools 종합선물셋트 |
핵심 키워드 :
이분탐색, 분할정복, 스택, 큐, 우선순위 큐
추천 : 내가 설계한 논리는 맞으나, 문제를 푸는데 시간초과가 많이 난다면 꼭 익혀야 할 파트. 컴퓨팅 사고로의 전환에서 가장 중요한 파트가 아닌가 싶음. 시간복잡도(time complexity)를 따지지 않고 코드를 짜는 건 컴퓨터과학에서 지양되어야 할 방향임을 절실히 확인.
문제번호 | 주제 | 문제제목 | 공부포인트 |
---|---|---|---|
2805 | 이분탐색 | 나무 자르기 | 오름차순 정렬 후, start, end값으로 mid를 찾자 |
2110 | 이분탐색 | 공유기 설치 | 코드가 진행되는 과정을 완벽히 이해해야 풀 수 있음 |
16564 | 이분탐색 | 히오스 프로게이머 | start, end를 뭐로 잡을래? |
1629 | 분할정복 | 곱셈 | 분할정복은 재귀가 필수, 나머지분배연산법칙 |
2630 | 분할정복 | 색종이 만들기 | 어디를 기준으로 나눌 지 보이나요? |
2261 | 분할정복 | 가장 가까운 두점 | 논리구조 짜기가 까다롭지만 짜고 보면 쉬운. |
10828 | 스택 | 스택 | Last In First Out |
9012 | 스택 | 괄호 | 이 문제를 보고 스택을 못 떠올린다면..? |
2504 | 스택 | 괄호의 값 | 컴퓨팅 사고 전환이 필요해 |
2493 | 스택 | 탑 | 시간 빌게이츠도 포기한 내 풀이(완전탐색) |
2164 | 큐 | 카드2 | popleft()는 일단 쓰면 튀어나감 |
11866 | 큐 | 요세푸스 문제 0 | deque를 활용한 컴퓨팅 사고 |
3190 | 큐 | 뱀 | 방향 문제, bfs를 알고나니 다른 문제로 보인다! |
11279 | 우선순위 큐 | 최대 힙 | heappop은 값이 가장 낮은 걸 뱉는다. 그렇다면? |
1655 | 우선순위 큐 | 가운데를 말해요 | 가운데를 말하는 tree가 있다? |
13334 | 우선순위 큐 | 철로 | 정렬만 잘 한다면 쉬운 문제. |
파트2의 핵심은, binary search, divide and conquer 등을 잘 활용하여 시간 복잡도를 낮추는 거 같다. 시간복잡도에 대해 이해하고 시간초과에 유의하자. 컴퓨터에게 넘겨줄 때 불필요한 부분은 쳐내고 내가 원하는 답을 빠르게 얻을 수 있는 그런 이쁜 코드를 짤 수 있도록 열심히 공부해보자!
핵심 키워드 :
그래프(vertex, edge, node, arc), BFS, DFS, 위상정렬
추천 : 주어지는 데이터 간의 관계가 보인다면, 그래프를 그릴 수 있다. 노드 간 연결을 다 했는데 그 다음을 모르겠다면 반드시 익혀야 할 파트.
문제번호 | 주제 | 문제제목 | 공부포인트 |
---|---|---|---|
1991 | 그래프탐색기본 | 트리순회 | 전위순회, 중위순회, 후위순회 |
1260 | 그래프탐색기본 | DFS와 BFS | DFS와 BFS를 배우고 싶다면 이걸 꼭 먼저 |
5639 | 그래프탐색기본 | 이진 검색 트리 | 이진탐색을 생활화합시다! |
1197 | 그래프탐색기본 | 최소스패닝트리 | Kruskal, Prim 알고리즘 |
11725 | DFS | 트리의 부모찾기 | 재귀 구조를 완벽히 이해했다면 쉬움 |
1707 | DFS | 이분 그래프 | -+-+-+가 핵심 |
21606 | DFS | 아침 산책 | DFS가 어떤 값을 return하는 지가 포인트 |
14888 | DFS | 연산자 끼워넣기 | DFS는 재귀다!(조합풀이랑 시간 비교) |
2573 | DFS | 빙산 | 분할정복, DFS, 방향 삼위일체 |
2178 | BFS | 미로 탐색 | BFS는 deque을 쓰면 편리해 |
18352 | BFS | 특정거리의도시찾기 | 이 때는 몰랐지 BFS+DP라는 걸 |
1916 | BFS | 최소비용구하기 | 다익스트라 알고리즘(heapq만 썼을 뿐인데!) |
7569 | BFS | 토마토 | 3차원 BFS |
3055 | BFS | 탈출 | BFS가 동시에 2개가 돈다면? |
2252 | 위상정렬 | 줄세우기 | 진입차수가 0인 노드부터 시작 |
2637 | 위상정렬 | 장난감조립 | 위상정렬 구조 잡기 좋은 문제 |
이전 파트들에 비해 어려워 직접 풀지 못 한 문제가 많지만, DFS와 BFS 방식에 대한 기초가 잡히고 나면 다른 사람이 작성한 코드를 봐도 이해하기 수월하다. 파트3부터 한 알고리즘으로 문제를 푸는 것보다 이전에 배웠던 것을 활용하면 시간을 단축하기가 좋다. 시간을 줄일 요소가 보인다면 최대한 줄여보자!!
핵심 키워드 :
동적 프로그래밍(DP), 그리디
추천 : 재귀, 분할정복은 어느 정도 이해하고 있지만 풀이 상 시간초과 혹은 메모리초과가 발생한다면 공부하기 좋은 파트. 특히, 그리디 알고리즘을 사용하면 대부분 앞서 발생한 문제가 해결될 수 있으나 적재적소에 사용하지 않는다면 '틀렸습니다'를 맞이할 수 있으니 주의!
문제번호 | 주제 | 문제제목 | 공부포인트 |
---|---|---|---|
2748 | DP | 피보나치 수2 | 바텀업, 탑다운 2가지 모두 학습해보자 |
1904 | DP | 01타일 | 점화식을 찾는 게 중요하다! |
9084 | DP | 동전 | DP테이블 만들기, 재귀해 구상하기 |
9251 | DP | LCS | DP테이블 x축,y축 잡기 |
12865 | DP | 아주 평범한 배낭 | Knapsack 알고리즘(국밥 문제) |
11053 | DP | 가장 긴 증가하는 부분 수열 | 시간복잡도를 고려한 알고리즘 설계 |
2098 | DP | 외판원 순회 | 비트마스킹, 또 등장한 DFS+DP |
2253 | DP | 점프 | DP는 모든 테이블을 채워야한다. |
11047 | 그리디 | 동전 0 | 앞선 선택이 뒤에 영향을 주면 안된다 |
1541 | 그리디 | 잃어버린 괄호 | 풀이를 보고 제일 충격받은 컴퓨팅 사고(Thinking) |
1931 | 그리디 | 회의실 배정 | 그리디는 정렬이 핵심 |
1700 | 그리디 | 멀티탭 스케줄링 | 그리디 알고리즘 사용 판단 근거를 찾기 |