[ 백준 16235 ] 나무 재테크 (C++)
[문제보기] [해결과정] 1. 2차원 vector로 맵 구현 (arr), 현재 양분 상태 저장 맵(map), S2D2 기계가 추가할 양분 맵 (mapS) 구현 2. 양분 상태의 초기값은 5, S2D2 양분 입력받기 3. 나무 입력받기 (y, x, age) 순으로... 4. 봄, 여름, 가을, 겨울 구현하기 (봄과 여름은 함께 구현) - 봄, 여름 : arr[i][j].size() 가 0이 아니라면, 나무가 있는 상태 이므로 접근, arr vector를 오름차순으로 정렬 후 임시 vector를 하나 만들어주고, 현재 나무의 나이와 양분 상태를 체크하여 양분이 충분하다면 양분 맵은 나무의 나이만큼 줄여주고, 임시 vector에 추가. 만약 나이만큼 되지 않는다면 death 변수에 나무의 나이/2 만큼 더함...
2020. 1. 31.
[ 백준 1614 ] 영식이의 손가락 (C++)
[문제보기] [해결과정] 아픈 손가락 별로 경우의 수가 어떻게 나오는지 규칙성 파악 1. 첫 번째 손가락 일 경우(엄지) : 0, 8, 16, 24, 32, 40, 48 ---> 8씩 증가 2. 두 번째 손가락 일 경우(검지) : 1, 7, 9, 15, 17, 23, 25 ---> 초기값 1 : 6 증가, 2 증가 반복 3. 세 번째 손가락 일 경우(중지) : 2, 6, 10, 14, 18, 22, 26 ---> 초기값 2 : 4씩 증가 4. 네 번째 손가락 일 경우(약지) : 3, 5, 11, 13, 19, 21, 29 ---> 초기값 3 : 2 증가, 6 증가 반복 5. 다섯 번째 손가락 일 경우(새끼) : 4, 12, 20, 28, 36, 44 ---> 초기값 4 : 8씩 증가 [소스코드] 1 2 ..
2019. 12. 4.
[ 백준 17836 ] 공주님을 구해라! (C++)
[문제보기] [해결과정] 1. 맵 저장 배열(2차원), 방문 체크 배열(3차원), 구조체(y좌표, x좌표, 방문시간, 검획득여부) 큐 생성 2. (0,0)부터 BFS 탐색 시작 2-1. 만약 방문 좌표가 검이 있는 곳이면, 다음 방문확인은 check[y][x][1] 에서 확인. 2-2. 아직 검을 찾지 못했다면, 다음 방문확인은 check[y][x][0] 에서 확인. 3. 공주님을 찾으면 시간 값을 저장하고 return; 위 사진과 같이 검을 안먹었을 때는 check[y][x][0]에서 BFS탐색을 계속하고, 만약 검을 먹었을 경우는 check[y][x][1]에서 검 먹기전 시간을 이어 탐색을 한다. 이때, 검을 먹었을 경우에는 벽을 모두 부술 수 있으니, map 체크를 하지 않아도 된다. (우측 사진처..
2019. 11. 29.
[ 백준 17779 ] 게리맨더링2 (C++)
[문제보기] [해결과정] 1. 기준점 (y,x)를 잡고 기준점으로 부터 왼쪽아래 대각선 (d1)과 오른쪽아래 대각선 (d2)가 갈 수 있는 최대 범위를 완전 탐색 2. 위쪽, 왼쪽, 오른쪽, 아래쪽 점 4개의 좌표 변수를 생성한다. (ty, tx, ly, lx, ry, rx, by, bx) 2-1. 위쪽 좌표는 1번에서의 기준점 (y,x) 2-2. 왼쪽 좌표는 기준점 (y,x)에서 d1만큼 이동한 좌표 ---> ( (y +dy[0] * d1), (x +dx[0] * d1) ) 2-3. 아래쪽 좌표는 왼쪽 좌표 (ly, lx)에서 d2만큼 이동한 좌표 ---> ( (ly + dy[1] * d2), (ly + dy[1] * d2) ) 2-4. 오른쪽 좌표는 기준점 (y,x)에서 d2만큼 이동한 좌표 --->..
2019. 11. 28.
[알고리즘 BFS & DFS 20] CHOOSENUMBER
문제 세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절히 뽑으면, 그 뽑힌 정수들이 이루는 집합과, 뽑힌 정수들의 바로 밑의 둘째 줄에 들어있는 정수들이 이루는 집합이 일치한다. 이러한 조건을 만족시키도록 정수들을 뽑되, 최대로 많이 뽑는 방법을 찾는 프로그램을 작성하시오. 예를 들어, N=7인 경우 아래와 같이 표가 주어졌다고 하자. 1234567 3 1 1 5 5 4 6 이 경우에는 첫째 줄에서 1, 3, 5를 뽑는 것이 답이다. 첫째 줄의 1, 3, 5밑에는 각각 3, 1, 5가 있으며 두 집합은 일치한다. 이때 집합의 크기는 3이다. 만약 첫..
2019. 8. 12.