n01r1r / CPP_CT

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

C++_CT

C++을 통해 Algorithm을 배우는 공간

Part 1. 등교준비는 차근차근 🏋🏋

핵심 키워드 : 배열, 문자열, 반복문과 재귀함수, 계산복잡도, 정렬, 완전탐색, 정수론

문제번호주제문제제목공부포인트
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 종합선물셋트

Part 2. 엄마 내 교복바지 어딨어?🤔🤔

핵심 키워드 :
이분탐색, 분할정복, 스택, 큐, 우선순위 큐

추천 : 내가 설계한 논리는 맞으나, 문제를 푸는데 시간초과가 많이 난다면 꼭 익혀야 할 파트. 컴퓨팅 사고로의 전환에서 가장 중요한 파트가 아닌가 싶음. 시간복잡도(time complexity)를 따지지 않고 코드를 짜는 건 컴퓨터과학에서 지양되어야 할 방향임을 절실히 확인.

문제번호주제문제제목공부포인트
2805이분탐색나무 자르기오름차순 정렬 후, start, end값으로 mid를 찾자
2110이분탐색공유기 설치코드가 진행되는 과정을 완벽히 이해해야 풀 수 있음
16564이분탐색히오스 프로게이머start, end를 뭐로 잡을래?
1629분할정복곱셈분할정복은 재귀가 필수, 나머지분배연산법칙
2630분할정복색종이 만들기어디를 기준으로 나눌 지 보이나요?
2261분할정복가장 가까운 두점논리구조 짜기가 까다롭지만 짜고 보면 쉬운.
10828스택스택Last In First Out
9012스택괄호이 문제를 보고 스택을 못 떠올린다면..?
2504스택괄호의 값컴퓨팅 사고 전환이 필요해
2493스택시간 빌게이츠도 포기한 내 풀이(완전탐색)
2164카드2popleft()는 일단 쓰면 튀어나감
11866요세푸스 문제 0deque를 활용한 컴퓨팅 사고
3190방향 문제, bfs를 알고나니 다른 문제로 보인다!
11279우선순위 큐최대 힙heappop은 값이 가장 낮은 걸 뱉는다. 그렇다면?
1655우선순위 큐가운데를 말해요가운데를 말하는 tree가 있다?
13334우선순위 큐철로정렬만 잘 한다면 쉬운 문제.

파트2의 핵심은, binary search, divide and conquer 등을 잘 활용하여 시간 복잡도를 낮추는 거 같다. 시간복잡도에 대해 이해하고 시간초과에 유의하자. 컴퓨터에게 넘겨줄 때 불필요한 부분은 쳐내고 내가 원하는 답을 빠르게 얻을 수 있는 그런 이쁜 코드를 짤 수 있도록 열심히 공부해보자!

Part 3. 그래프🔄를 모르면 너는 갈 수 없다🔙

핵심 키워드 :
그래프(vertex, edge, node, arc), BFS, DFS, 위상정렬

추천 : 주어지는 데이터 간의 관계가 보인다면, 그래프를 그릴 수 있다. 노드 간 연결을 다 했는데 그 다음을 모르겠다면 반드시 익혀야 할 파트.

문제번호주제문제제목공부포인트
1991그래프탐색기본트리순회전위순회, 중위순회, 후위순회
1260그래프탐색기본DFS와 BFSDFS와 BFS를 배우고 싶다면 이걸 꼭 먼저
5639그래프탐색기본이진 검색 트리이진탐색을 생활화합시다!
1197그래프탐색기본최소스패닝트리Kruskal, Prim 알고리즘
11725DFS트리의 부모찾기재귀 구조를 완벽히 이해했다면 쉬움
1707DFS이분 그래프-+-+-+가 핵심
21606DFS아침 산책DFS가 어떤 값을 return하는 지가 포인트
14888DFS연산자 끼워넣기DFS는 재귀다!(조합풀이랑 시간 비교)
2573DFS빙산분할정복, DFS, 방향 삼위일체
2178BFS미로 탐색BFS는 deque을 쓰면 편리해
18352BFS특정거리의도시찾기이 때는 몰랐지 BFS+DP라는 걸
1916BFS최소비용구하기다익스트라 알고리즘(heapq만 썼을 뿐인데!)
7569BFS토마토3차원 BFS
3055BFS탈출BFS가 동시에 2개가 돈다면?
2252위상정렬줄세우기진입차수가 0인 노드부터 시작
2637위상정렬장난감조립위상정렬 구조 잡기 좋은 문제

이전 파트들에 비해 어려워 직접 풀지 못 한 문제가 많지만, DFS와 BFS 방식에 대한 기초가 잡히고 나면 다른 사람이 작성한 코드를 봐도 이해하기 수월하다. 파트3부터 한 알고리즘으로 문제를 푸는 것보다 이전에 배웠던 것을 활용하면 시간을 단축하기가 좋다. 시간을 줄일 요소가 보인다면 최대한 줄여보자!!

Part 4. 하교 후 분식집. 뭘 먹어야 제일 행복할까?😋🥘😋

핵심 키워드 :
동적 프로그래밍(DP), 그리디

추천 : 재귀, 분할정복은 어느 정도 이해하고 있지만 풀이 상 시간초과 혹은 메모리초과가 발생한다면 공부하기 좋은 파트. 특히, 그리디 알고리즘을 사용하면 대부분 앞서 발생한 문제가 해결될 수 있으나 적재적소에 사용하지 않는다면 '틀렸습니다'를 맞이할 수 있으니 주의!

문제번호주제문제제목공부포인트
2748DP피보나치 수2바텀업, 탑다운 2가지 모두 학습해보자
1904DP01타일점화식을 찾는 게 중요하다!
9084DP동전DP테이블 만들기, 재귀해 구상하기
9251DPLCSDP테이블 x축,y축 잡기
12865DP아주 평범한 배낭Knapsack 알고리즘(국밥 문제)
11053DP가장 긴 증가하는 부분 수열시간복잡도를 고려한 알고리즘 설계
2098DP외판원 순회비트마스킹, 또 등장한 DFS+DP
2253DP점프DP는 모든 테이블을 채워야한다.
11047그리디동전 0앞선 선택이 뒤에 영향을 주면 안된다
1541그리디잃어버린 괄호풀이를 보고 제일 충격받은 컴퓨팅 사고(Thinking)
1931그리디회의실 배정그리디는 정렬이 핵심
1700그리디멀티탭 스케줄링그리디 알고리즘 사용 판단 근거를 찾기

출처

https://velog.io/@ngngs/%ED%95%9C-%EC%9E%A5%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EB%8A%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98

About