-
[SWEA] 2112. [모의 SW 역량테스트] 보호 필름Algorithm/SWExpertAcademy 2020. 3. 12. 22:49
[문제]
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V1SYKAaUDFAWu
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
[풀이과정]
사용언어 : c++
1. 완전탐색으로 풀었다.
2. 모든 W에 K갯수만큼의 세로의 셀이 존재하면 합격 기준이 된다. 따라서 K개의 약품을 투입하면 통과됨으로 시작 Answer값은 K로 시작했다.
3. 세로라인을 체크하는 checkMap함수를 만들었다. 세로라인에 셀 중 같은 값이 연속적으로 K개가 존재하는지 판단하는 함수이다.
4. 이제 약품을 1, 0으로 만들어주면서 모든 경우의 수를 찾아 최솟값을 구하면 된다.
5. checkLine함수를 통해 해당 셀에 약품을 투여할지를 판단한다.
이미 해당 셀 모두 1값이라면 1번 약품을 투여 할 필요는 없기 때문이다.
6. 구해진 Answer값보다 더 큰 탐색은 종료시켜주고, 최대값을 넘어선 탐색 또 한 종료시켜줬다.
소스코드
더보기#include<stdio.h> #include<string.h> int map[13][20]; int visited[13]; int T, D, W, K; int answer = 13; bool checkMap() { //세로라인 검사 int prev, count, flag; for (int i = 0; i < W; i++) { prev = map[0][i]; count = 1; flag = 1; for (int j = 1; j < D; j++) { if (prev == map[j][i]) { count++; } else { prev = map[j][i]; count = 1; } if (count >= K) { flag = 0; break; } } if (flag) { return false; } } return true; } bool lineCheck(int y, int num) { for (int i = 0; i < D; i++) { if (map[y][i] == num) continue; return true; } return false; } void solution(int begin, int count) { if (count >= K) { return; } if (answer <= count) { return; } if (checkMap()) { if (answer > count) { answer = count; } return; } int cpymap[13][20] = { 0, }; memcpy(cpymap, map, sizeof(map)); for (int i = begin; i < D; i++) { if (visited[i] == 0) { visited[i] = 1; if (lineCheck(i, 1)) { for (int j = 0; j < W; j++) { map[i][j] = 1; } solution(i + 1, count + 1); } if (lineCheck(i, 0)) { for (int j = 0; j < W; j++) { map[i][j] = 0; } solution(i + 1, count + 1); } memcpy(map, cpymap, sizeof(map)); visited[i] = 0; } } } int main() { scanf("%d", &T); for (int tc = 1; tc <= T; tc++) { memset(map, 0, sizeof(map)); memset(visited, 0, sizeof(visited)); scanf("%d %d %d", &D, &W, &K); for (int i = 0; i < D; i++) { for (int j = 0; j < W; j++) { scanf("%d", &map[i][j]); } } answer = K; solution(0, 0); printf("#%d %d\n",tc, answer); } }
[결과]
'Algorithm > SWExpertAcademy' 카테고리의 다른 글
[SWEA]5653. [모의 SW 역량테스트] 줄기세포배양 (1) 2020.03.16 [SWEA]5658. [모의 SW 역량테스트] 보물상자 비밀번호 (0) 2020.03.15 4613. 러시아 국기 같은 깃발 (0) 2020.02.24 1238. [S/W 문제해결 기본] 10일차 - Contact (0) 2020.02.24 3234. 준환이의 양팔저울 (0) 2020.02.23