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
- 백트래킹
- next_permutation
- Gold 4
- DFS
- Level 4
- SWEA
- c++
- 삼성 SW 역량 테스트
- 2020 KAKAO BLIND
- 브루트포스
- Gold 5
- Web
- 2020 카카오 인턴십
- 월간 코드 챌린지
- 코드 리뷰
- 백준
- Level 2
- level 1
- 코드리뷰
- BFS
- 그리디
- pass
- Level 3
- 구현
- 부스트코스
- 프로그래머스
- DP
- 스택/큐
- 2019 KAKAO BLIND
- 시뮬레이션
Archives
- Today
- Total
Min:D's Devlog
[백준][삼성 SW 역량 테스트][Gold 5][C++] 15684 사다리 조작 본문
문제
백준 삼성 SW 역량 테스트 기출 문제 - 15684 사다리 조작 (Gold 5)
문제 풀이
접근 방식
사다리에 가로선을 추가하여 i번 세로선의 결과가 i번이 나오도록 조작할 때,
추가해야 하는 가로선 개수의 최솟값을 구하는 문제이다.
우선 H×N 크기의 map 벡터를 만들어 사다리의 가로선들을 저장해주었다.
가로선의 왼쪽 부분과 오른쪽 부분을 구분해주어야 하기 때문에,
왼쪽 부분은 1, 오른쪽 부분은 -1로 저장하였다.
그 후, DFS 방식으로 탐색하여 가로선이 없는 곳들에 가로선을 최대 3개까지 추가해보며,
추가해야 하는 가로선의 개수의 최솟값을 구해주었다.
원하는 대로 조작되었는지 확인하기 위해 check 함수를 만들어 확인해주었다.
check 함수는 모든 열을 위에서 아래로 탐색하며 1을 만나면 1을 더하고 -1을 만나면 1을 빼서,
최종적으로 모든 인덱스 값이 바뀌지 않는다면 true를 반환해주도록 구현하였다.
풀이 코드 - C++
#include <iostream>
#include <vector>
using namespace std;
int N, M, H, MIN;
vector<vector<int>> map;
bool check() {
for (int i = 0; i < N; i++) {
int a = i;
for (int j = 0; j < H; j++) {
if (map[j][a] == 1)
a++;
else if (map[j][a] == -1)
a--;
}
if (a != i)
return false;
}
return true;
}
void DFS(int x, int y, int cnt) {
if (cnt >= MIN) return;
if (check()) {
MIN = cnt;
return;
}
for (int i = x; i < H; i++) {
for (int j = y; j < N - 1; j++) {
if (map[i][j] != 0 || map[i][j + 1] != 0) continue;
map[i][j] = 1;
map[i][j + 1] = -1;
DFS(i, j + 1, cnt + 1);
map[i][j] = 0;
map[i][j + 1] = 0;
}
y = 0;
}
}
int main() {
// 입력 받기
cin >> N >> M >> H;
map.assign(H, vector<int>(N));
for (int i = 0; i < M; i++) {
int a, b;
cin >> a >> b;
map[a - 1][b - 1] = 1;
map[a - 1][b] = -1;
}
// 최소 횟수로 가로선 추가하기
MIN = 4;
DFS(0, 0, 0);
if (MIN != 4)
cout << MIN;
else
cout << -1;
}
실행 결과
'알고리즘 > 백준' 카테고리의 다른 글
[백준][삼성 SW 역량 테스트][Silver 1][C++] 14891 톱니바퀴 (0) | 2020.09.30 |
---|---|
[백준][삼성 SW 역량 테스트][Gold 4][C++] 15685 드래곤 커브 (0) | 2020.09.29 |
[백준][삼성 SW 역량 테스트][Gold 5][C++] 15686 치킨 배달 (0) | 2020.09.26 |
[백준][삼성 SW 역량 테스트][Gold 5][C++] 15683 감시 (0) | 2020.09.25 |
[백준][Gold 4][C++] 1261 알고스팟 (0) | 2020.08.14 |
Comments