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 |
Tags
- swexpertacademy
- 알고리즘 문제
- 쉬운 알고리즘 문제
- 코테 준비
- 원서읽기
- 원서
- PyQt
- sw expert
- 백준
- englishbook
- English
- nightroutine
- 프로그래머스
- dfs
- 코딩테스트
- 직무면접
- 원서읽자
- MySQL
- sw expert academy
- BFS
- 코테
- readingbook
- 코테 대비
- 삼성
- 완전탐색
- SQL
- STUDYENGLISH
- D4
- 알고리즘
- the midnight library
Archives
- Today
- Total
시나브로
1949. [모의 SW 역량테스트] 등산로 조성 본문
728x90
41개에 오답이 뜬다면, visit 체크를 해보길 바랍니다...
등산로에 포함된 길을 깍으면 안되기 때문입니다.
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
typedef struct node {
int i;
int j;
};
int dx[] = { 0,-1,0,1 };
int dy[] = { 1,0,-1,0 };
int max_length = 0;
void search(vector<vector<int>> map,node point,int possible,int count,vector<vector<int>> visit) {
for (int k = 0; k < 4; k++) {
if (point.i + dx[k] >= 0 && point.i + dx[k] < map.size() && point.j + dy[k] >= 0 && point.j + dy[k] < map.size()) {
if (visit[point.i + dx[k]][point.j + dy[k]] == 1)
continue;
if (map[point.i + dx[k]][point.j + dy[k]] < map[point.i][point.j] ) {
visit[point.i + dx[k]][point.j + dy[k]] = 1;
search(map, { point.i + dx[k],point.j + dy[k] }, possible, count + 1,visit);
visit[point.i + dx[k]][point.j + dy[k]] = 0;
}
else if (possible != -1 && map[point.i][point.j] <= map[point.i + dx[k]][point.j + dy[k]]) {
if (map[point.i + dx[k]][point.j + dy[k]] - map[point.i][point.j] < possible) {
int box = map[point.i + dx[k]][point.j + dy[k]];
map[point.i + dx[k]][point.j + dy[k]] = map[point.i][point.j]-1;
visit[point.i + dx[k]][point.j + dy[k]] = 1;
search(map, { point.i + dx[k],point.j + dy[k] }, -1, count + 1,visit);
map[point.i + dx[k]][point.j + dy[k]] = box;
visit[point.i + dx[k]][point.j + dy[k]] = 0;
}
}
}
}
if (count > max_length) {
max_length = count;
}
}
int main() {
int tc = 0;
cin >> tc;
for (int p =1; p <= tc; p++) {
int N, K;
cin >> N >> K;
max_length = 0;
vector<vector<int>> map;
vector<node> list;
vector<vector<int>> visit;
int max = 0;
for (int i = 0; i < N; i++) {
vector<int> a;
vector<int> b;
for (int j = 0; j < N; j++) {
int box = 0;
cin >> box;
a.push_back(box);
b.push_back(0);
if (box > max) {
list.clear();
max = box;
list.push_back({ i,j });
}
else if (box == max) {
list.push_back({ i,j });
}
}
map.push_back(a);
visit.push_back(b);
}
for (int i = 0; i < list.size(); i++) {
visit[list[i].i][list[i].j] = 1;
search(map, list[i],K,1,visit);
visit[list[i].i][list[i].j] = 0;
}
cout <<"#"<<p<<" "<< max_length<<endl;
}
return 0;
}
728x90
'알고리즘 > SW Expert Academy' 카테고리의 다른 글
3813. [Professional] 그래도 수명이 절반이 되어서는... (0) | 2021.04.13 |
---|---|
9780. 외계인 침공 (0) | 2020.05.25 |
9778. 카드 게임 (0) | 2020.05.19 |
1859. 백만 장자 프로젝트 (0) | 2020.05.17 |
[D5] 9015. 배열의 분할 (0) | 2020.03.18 |
Comments