일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 파이썬 강좌
- 파이썬 강의
- 자살
- python 강의
- 다이나믹프로그래밍
- 알고리즘
- C++
- 2020
- 철학
- 라즈베리파이 모니터
- 계획
- 자작시
- python 강좌
- 백준
- 파이썬
- 2024
- dp
- 인생
- BOJ
- 강의
- 2021
- 슬픔
- 공부
- mmcv
- dynamic programming
- mmdetection
- 강좌
- it
- python
- 프로그래밍
- Today
- Total
목록
전체 글
(127)
반응형
Stargazer
1회독 마친 후에 내용 정리를 위해 작성한 독후감입니다. 한줄평 이미 한번 쌓았던 마인드 셋을 다시 잡는데는 괜찮지만, 그 근거가 부족하고 내용 이해의 부족이 발생할 경우 맹신으로 인해 잘못된 길로 갈 수 있는 양날의 검같은 책 본인도 이 책에 전부를 제대로 이해한 건 아니지만, 단순히 생각해봐도 해석에 따라서 한낱 사이비 책으로 보일 수 있다는 의견일 뿐 어떤 의도로도 작가를 폄하할 생각은 없다. 오히려 대부분 내용에 대해 이전에 경험해 본 적이 있기 때문에 대부분의 감정선을 이해할 수 있었다. 다만 서윤이 직접 쓴 내용이 아닌지라, 대화내용 만으로는 근거 부족, 전달 오류가 발생했을 수도 있고, 더 자세한 내용을 알지 못해 아쉬울 따름이었다. 줄거리 파트별 요약 및 평가, 비판, 느낀점 1. 부를 끌..
접근: 노드간 순서를 정렬하는 것이기 때문에, 위상정렬로 해결하면 된다. 전략: 각 순서에 대해서 그래프를 그려주고, 그래프 중에서 진입차수가 0인 노드부터 처리하면서, 그 노드로 부터 진입하는 노드의 진입차수를 하나 씩 줄여간다. 그리고 줄인 차수 중 0인 노드를 다시 탐색하면서 반복한다. 만약 처리하지 못한 노드가 있는데, 진입차수가 0인 것이 없다면 순서를 처리 할 수 없는 상태이고, 처리 수랑 전체 노드 수가 같다면, 그 처리 순서대로 출력하면 된다. 코드: #include #include #include using namespace std; int n,m; vector edge[1002]; int num[1002]; int main(){ cin >> n >> m; for(int i=0;i> t;..
접근: 사실상 구현을 잘하는지 묻는 문제.(덕분에 복붙의 향연을 볼 수 있었다..) 크기가 20x20 미만이므로 dfs(백트래킹)를 이용해서 풀어도 무방하다. 전략: 구현 부분은 대략적으로만 설명하면, 모듈화를 위해서 판에 있는 줄들을 한 줄씩 가져와서, 줄을 이동하는 좌우로 이동 가능한 함수를 만든다. 각 줄에 대해 이동을 한 후에 다시 복사하여 다음 count 에 해당하는 map 변수로 저장하여 다음 함수로 넘어간다. (이렇게 따로 저장해 놓으면 따로 백트래킹 처리를 하지 않아도 된다) 그 외 5번 내로 가장 최대로 구할 수 있는 수를 구해야 하므로 DFS를 이용하여, 시뮬레이션을 진행한다. 그 후에 가장 큰 수를 map을 스캔 해서 가장 큰 것을 취하여 반환한다. 코드: #include #inclu..
접근: DP(Dynamic Programming)을 이용해서 푸는 문제. 발상은 행렬 곱셈이 이루어진 후에 두 행렬이 하나의 행렬로 이루어지기 때문에 작은 문제를 뭉쳐서 큰 문제를 해결 할 수 있음을 암시한다. 전략: 전체 행렬의 곱을 큰 문제로 보았을 때, 두 행렬의 곱으로 나눌 수 있고(구간 단위로), 이는 작은 문제로 나누어서 해결한다는 뜻이다. 그 행렬을 구할 수 있는 모든 경우의 수 중에 가장 연산이 가장 작으려면, 구간을 어떻게 나누었을 때 가장 곱 연산이 작은 지를 알면된다. 따라서 구간을 잘게 쪼개어 DP적으로 해결한다. 맨 아래(기본 행렬 곱)에 도달 했을 때, 두 행렬의 곱 연산 수를 구하여서 그 값을 저장한다. 이를 쌓아서 올리면 전체 곱셈 순서를 구할 수 있게 된다. -> 행렬을 나..
접근: 접근은 처음에는 DP로 하려다가 너무 길 것 같아서 포기하였고, 아이디어가 떠오르지 않아서 검색을 해보았다. 그랬더니, 이분 탐색을 이용한 풀이가 있었다. 전략: 가장 긴 수열을 만들기 위해서는 그 숫자들의 간격이 가장 작게 숫자를 설정하는 것인데, 하나 씩 조사를 할 때, 해당하는 값을 포함하는 새로운 수열을 만드는 것처럼 배열 내의 값을 inplace 하여 계속 해서 업데이트 해나가는 방식이다. (작동 방식은 그러한데 직접 해보기 전에는 이해하기 어려웠다.) 매 값을 입력 받을 때, 수열 맨 뒤의 값이 더 작으면 뒤로 삽입 해주고 작다면, 배열 내에 그 값보다 크면서 제일 작은 것을 찾아서 이 값으로 바꾼다. 코드: #include #include using namespace std; int ..