반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 안드로이드스튜디오
- 백준
- 카이스트
- 프래그먼트
- glfw
- 컴퓨터그래픽스
- nodeJS
- computergraphics
- 타입스크립트
- 몰입캠프후기
- 어은동맛집
- 자바스크립트
- 리사이클러뷰
- 대전맛집
- 앱개발
- 카이스트맛집
- node.js
- 몰입캠프
- 후기
- 우선순위큐
- DP
- 분리집합
- 알고리즘
- 자바
- BFS
- html
- MySQL
- 궁동
- 위상정렬
- 프로그래머스
Archives
- Today
- Total
소근소근
[백준 BOJ 1937 glod3 - 욕심쟁이 판다] DFS(?) , DP C++ 본문
728x90
반응형
SMALL
백준 욕심쟁이 판다
https://www.acmicpc.net/problem/1937
어떤 칸에서 출발하여 계속 대나무가 더 많은 쪽으로만 이동할 때, 최대로 움직일 수 있는 칸의 개수를 구하는 문제이다.
처음에 단순 DFS인줄 알고 이중 for문을 돌며 모든 칸에 대해 dfs를 돌려 최대 칸의 개수를 구했더니 시간초과가 났다.
이 문제는 재귀로 dp를 구현해서 풀면 되는 문제였다.
풀이 해법은 https://yabmoons.tistory.com/154 블로그 글을 참고하였다!
핵심 아이디어는
dp[x][y] 에는 이 칸에서 판다가 최대로 살 수 있는 날을 저장하는 것이다.
모든 칸은 기본적으로 최소 dp배열에 1을 넣어준다. 최소 그 칸에서는 대나무를 먹을 수 있기 때문이다.
3 | 6 |
1 | 7 |
예를 들어 (1,1) 위치에서는 3->6->7 으로 총 세칸이다. dp[1][1] = 3
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
#include <tuple>
#include <string>
#include <string.h>
#include <iostream>
#include <map>
using namespace std;
int N;
int tree[501][501];
int dp[501][501];
int dx[4] = { -1,1,0,0 };
int dy[4] = { 0,0,1,-1 };
bool range(int x, int y) {
if (x >= 1 && y >= 1 && x <= N && y <= N)
return true;
return false;
}
int DP(int x, int y) {
if (dp[x][y] != 0) return dp[x][y];
dp[x][y] = 1;
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (range(nx, ny) && tree[x][y] < tree[nx][ny]) {
dp[x][y] = max(dp[x][y], DP(nx, ny) + 1);
}
}
return dp[x][y];
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> N;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
cin >> tree[i][j];
}
}
int dab = 0;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
dab = max(dab, DP(i,j));
}
}
cout << dab;
}
재귀로 dp를 구현하는 아이디어를 떠올리는 것과 직접 구현하는게 아직은 어렵게 느껴진다..
어려운 dp문제를 더 풀어봐야 할 것 같다.
728x90
반응형
LIST
'Algorithm' 카테고리의 다른 글
[백준 BOJ 1966 silver3 - 프린터 큐] 자료구조 , 큐 C++ (0) | 2022.01.14 |
---|---|
[백준 BOJ 2573 glod4 - 빙산] DFS C++ (0) | 2022.01.13 |
[프로그래머스 - 단어 변환] BFS C++ (0) | 2022.01.09 |
[프로그래머스 - 네트워크] BFS, 분리집합(disjoint set) Union & Find C++ (0) | 2022.01.08 |
[프로그래머스 - 타겟 넘버] BFS C++ (0) | 2022.01.08 |