Week02 기간 2024.09.20 FRI - 09.26 THU
조원 ㅎㅂ ㅎㅇ (ㅎㅇ은 갠플, ㅎㅂ와 둘이 진행)
1. 문제 풀이
No | 문제 | 알고리즘 분류 | 키워드 공부 | 난이도 | 진행 여부 |
1 | 1991 트리 순회 | 트리, 재귀 | 이진 트리 순회, 클래스와 객체 | 하 | 진행 |
2 | 5639 이진 검색 트리 | 하 | |||
3 | 1197 최소 스패닝 트리 | 하 | |||
4 | 1260 DFS 와 BFS | 하 | 진행 | ||
5 | 11724 연결 요소와 개수 | 하 | |||
6 | 2606 바이러스 | 하 | |||
7 | 11725 트리의 부모 찾기 | 중 | |||
8 | 1707 이분 그래프 | 중 | |||
9 | 21606 아침 산책 | 중 | |||
10 | 14888 연산자 끼워넣기 | 중 | |||
11 | 2573 빙산 | 상 | |||
12 | 2617 구슬 찾기 | 상 | |||
13 | 2178 미로 탐색 | 하 | |||
14 | 18352 특정 거리의 도시 찾기 | 힙큐 heapq | 하 | 시간초과 | |
15 | 1916 최소 비용 구하기 | 중 | |||
16 | 2665 미로 만들기 | 중 | |||
17 | 7569 토마토 | 중 | |||
18 | 3055 탈출 | 중 | |||
19 | 2294 동전2 | 상 | |||
20 | 2252 줄 세우기 | 하 | |||
21 | 2637 장난감 조립 | 중 | |||
22 | 1432 그래프 수정 | 상 | |||
23 | 1948 임계 경로 | 상 |
2. 공부 키워드
No. | 키워드 | 정리 내용 | 진행 여부 |
1 | 그래프 종류/ 표현 방식 | [TIL] 그래프 종류와 표현 방식 개념 정리 ㅈㅎ님 스터디 |
|
2 | BFS/ DFS | [TIL] DFS 깊이 우선 탐색 BFS 너비 우선 탐색 ㅅㅎ님 스터디 |
|
3 | 위상 정렬 | [TIL] 위상 정렬 Topology Sort ㄱㅅ님 스터디 |
|
4 | B-Tree | ||
5 | Trie 트라이 | ||
6 | 다익스트라 | [TIL] 다익스트라 Dijkstra | |
7 | 플로이드 와샬 | [TIL] 플로이드 와샬 Floyd Warshall | |
8 | 최소 신장 트리 | [TIL] 최소 신장 트리 MST, Minimum Spanning Tree |
3. 책 읽기
CH01 1.5 - CH01 1.9
CH01 정리 https://helloahram.tistory.com/29
정글 FAQ
Q. 좋은 코드를 짜고 싶습니다. 어떤 코드가 좋은 코드인가요?
다음의 우선순위대로 더 좋은 코드입니다. 즉, 첫번째 조건이 만족되지 않는 코드는 두번째, 세번째 조건이 만족되어도 나쁜 코드입니다.
- 정답을 내는 코드가 좋은 코드입니다. 주어진 문제의 조건을 만족하는 입력에 대해 문제가 요구하는 답변을 내는 코드가 좋은 코드입니다. 즉, 어떻게든 제대로 돌아가는 코드를 짜는 것이 첫번째 조건입니다. 실행되지 않는 코드는 최악이며, 어떤 때는 정답을, 어떤 때는 오답을 내거나 무한루프에 빠지는 코드도 나쁜 코드입니다.
- 계산 복잡도(Computational complexity)가 낮은 코드가 더 좋은 코드입니다. 시간 복잡도와 공간 복잡도는 알고리즘의 성능을 측정하기 위해 만든 개념이고 도구입니다. 시간 복잡도가 낮은 알고리즘이 훨씬 빨리 돌며, 공간 복잡도가 낮은 알고리즘이 훨씬 적은 메모리를 차지합니다. 같은 논리로 같은 기계에서 항상 더 빠르거나, 더 적은 메모리를 차지하는 코드가 더 좋은 코드입니다.
- 사람이 알아보기 좋은 코드가 더 좋습니다. 사람이 코드를 읽고 이 코드가 문제를 어떻게 푸는지, 어떻게 동작하는지 이해하기 쉬운 코드가 좋은 코드입니다. 코드의 길이, 변수명의 길이, 주석의 유무따위는 부차적인 사항입니다. 코드와 변수명이 짧고, 주석이 한줄도 없어도 대부분의 사람이 코드를 읽고 이해할 수 있으면 아주 좋은 코드입니다. 반면에, 코드가 길어도 복붙(copy & paste) 투성이고, 주석은 있으나 코드 동작과 다르며, 의미를 이해할 수 없이 길이만 긴 변수명을 가진 >코드는 나쁜 코드입니다. 코드의 길이가 짧아도 이해할 수 없다면 암호일 뿐입니다. 다른 사람이 유지 보수 할 수 없으며, 바이러스 코드로 의심 받을 수 있습니다. 프로그래밍 언어도 언어이므로 알아보기 좋게 쓰는것이 좋고, 자연어와 마찬가지로 많은 연습이 필요합니다.
Q. 아무것도 안 보고 풀고 싶은데 시간이 너무 오래 걸립니다
자신의 잠재 능력만으로 문제를 풀고 싶은 마음은 이해합니다. 그렇지만, 어느 누구나 잘하지 못하던 때는 있었습니다. 여러분이 지금은 글도 잘 쓰고 말도 잘 하지만, 태어나자마자 말도 하고 글도 쓰지는 않았을 것입니다. 사실, 그 어떤 위인도 처음부터 잘 하지는 못했을 것입니다.
말을 배우거나 글을 쓸 때 처음부터 문법을 배운 다음에 말을 하고 글을 쓰지는 않았을 겁니다. 문제를 읽고 일정 시간 (5분~30분) 동안 문제 풀이 방법을 생각해 보고 생각이 나지 않는다면, 다른 사람의 답을 보고 익히는 방법도 배우는 방법 중에 하나입니다. 사람마다 익히는 방법이 매우 다르므로 구조를 먼저 익히고 응용을 하는 것이 빠른 사람도 있겠지만, 그 방법이 통하지 않는다면 다른 방법을 찾아 먼저 익히는 것이 우선이라고 생각합니다.
사실 30분쯤 생각했는데 답이 떠오르지 않으면 내가 모르는 겁니다. 모르면 배우면 됩니다. 모르는 게 죄는 아니지 않습니까? (모르는 것을 핑계삼아 자신의 잘못을 인정하지 않는 것은 문제겠죠.)
Q. "컴퓨팅 사고로의 전환"만으로 코딩 테스트를 준비하기에는 범위가 좁은 것 같습니다.
일단, "컴퓨팅 사고로의 전환"이라는 제목 그대로 컴퓨터가 어떻게 움직이는지를 체득하는 과정이지, 코딩 테스트만을 준비하는 과정은 아닙니다. 그리고, 알고리즘 문제 풀기를 4주만 해서 코딩 테스트 문제를 다 풀 수 있을 것이라고 생각할 수 없습니다. WEEK04 이후에도 습관적으로 계속 풀어보는 것이 좋습니다. 첫 4주 과정은 시동을 걸기 위한 작업일 뿐입니다.
첫 4주에 여러분들이 익혀 주셔야 하는 것은 현실의 문제를 컴퓨터에게 효율적으로 빠르게 떠넘기는 능력입니다. 컴퓨터에게 일을 시키기 위해서 자료구조와 알고리즘의 공부는 필수입니다.
Q. 지난 주 문제를 다 풀지 못했습니다. 지난 주 문제를 다 풀고 이번 주 문제를 풀어야겠죠?
아니오. 이번 주 문제를 먼저 푸십시오. 이번 주 문제를 다 풀고 시간이 남으면 지난 주 문제를 푸는 것을 권장합니다. 문제들끼리 서로 연관성이 있고, 어떤 경우에는 추천하는 풀이 순서가 있습니다. 그렇지만, 사람마다 이해하는 방식이 다르기 때문에 꼭 같은 순서대로 익혀야 한다는 법은 없습니다. 일단 이번 주에 주어진 것에 최선을 다 해 주십시오. 가끔, 이번 주 문제를 풀고 난 후에 지난 주에 이해하지 못했던 것을 이해하는 경우가 있습니다.
'크래프톤정글 > 정글생활' 카테고리의 다른 글
[정글] Week03 진행 내용 (1) | 2024.09.29 |
---|---|
[정글] Week02 회고 (8) | 2024.09.28 |
[정글] 다시 쓰는 Week01 회고 (5) | 2024.09.19 |
[정글] 정글에서 살아남는 방법 (1) | 2024.09.12 |
[정글] Week01 진행 내용/ 회고 (0) | 2024.09.11 |