삼성 코딩 모의 테스트 - 등산로 조정
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PoOKKAPIDFAUq
무단 복제를 하면 안되기 때문에 위 링크를 들어가서 회원가입 한 후 문제를 보셔야 합니다.
이 문제는 기본적인 완전 탐색 문제로, 문제를 풀 때 주의해야 할 점은 공사가 가능하여, 등산로를 만들 수 있을 때를 따로 조건을 주어야하고, 이 때 가장 주의 할게 만약 공사가 가능하여 등산로를 깍을 때, 무조건 최대 공사 가능 깊이를 깍는 것이아니라, 필요한 만큼만 깍아야 한다는 점입니다.
소스 코드
xxxxxxxxxxusing namespace std;int T; // 테스트 케이스 수int N, K; // N : 한 변의 길이 , K : 최대 공사 가능 깊이int map[9][9]; // 맵 저장 2차원 배열int max_length; // 가장 긴 등산로int max_height; // 가장 높은 봉우리int chk[9][9]; // 중복 확인용 배열int dir_y[4] = {-1,0,1,0}; // 12시 부터 시계 방향int dir_x[4] = {0,1,0,-1};void engine(int n,int y,int x,int can){ int here_y = y; // 현재 y좌표 int here_x = x; // 다음 x좌표 int can_dig = can; // 깍기 가능 (1이면 가능 , 0이면 불가) max_length = max(max_length, n); for (int i = 0; i < 4; i++) // 4방향 돌기 { int next_y = here_y + dir_y[i]; int next_x = here_x + dir_x[i]; if (next_y < 1 || next_x < 1 || next_y > N || next_x > N) continue; // 범위를 벗어나면 제외 if (map[here_y][here_x] > map[next_y][next_x] && !chk[next_y][next_x]) // 낮은 높이로 이동 { chk[next_y][next_x] = 1; engine(n + 1 , next_y, next_x, can_dig); chk[next_y][next_x] = 0; } else if (map[here_y][here_x] <= map[next_y][next_x] && map[here_y][here_x] > map[next_y][next_x] - K && !chk[next_y][next_x] && can_dig) // 갈려고 하는 곳이 높지만, 땅을 파서 가능한 경우 { int tmp = map[next_y][next_x]; chk[next_y][next_x] = 1; map[next_y][next_x] = map[here_y][here_x] - 1; // 지형을 깍을 때 무조건 K만큼 깍을 필요가 없음 engine(n + 1 , next_y, next_x, 0); map[next_y][next_x] = tmp; // 지형 깍기전으로 되돌리기 chk[next_y][next_x] = 0; } }}void input(){ cin >> T; for (int i = 1; i <= T; i++) { max_height = 0; max_length = 0; cin >> N >> K; for (int j = 1; j <= N; j++) { for (int k = 1; k <= N; k++) { cin >> map[j][k]; max_height = max(max_height, map[j][k]); // 가장 높은 봉우리 저장 //chk[j][k] = 0; // 체크 배열 초기화 } } for (int j = 1; j <= N; j++) { for (int k = 1; k <= N; k++) { if (map[j][k] == max_height) { chk[j][k] = 1; engine(1, j, k, 1); chk[j][k] = 0; } } } cout << '#' << i << ' ' << max_length << '\n'; }}int main(){ input(); return 0;}
'알고리즘 > 완전탐색' 카테고리의 다른 글
| 삼성 코딩 테스트 준비 - 색종이 2630번 (0) | 2018.04.10 |
|---|---|
| 맥주 마시면서 걸어가기 9205번 (BFS) (1) | 2018.04.09 |
| 삼성 코딩 테스트 기출 - 시험 감독 13458번 (0) | 2018.04.09 |
| 삼성 코딩 테스트 기출 - 주사위 굴리기 14499번 (0) | 2018.04.08 |
| 삼성 코딩 기출 테스트 - 톱니바퀴 14891번 (단순 구현) (0) | 2018.04.06 |