본문 바로가기

백트래킹6

[백준] 17779.게리맨더링2 (java) / BackTracking, DFS, 시뮬레이션, 완전탐색 @BackTracking, DFS, 시뮬레이션, 완전탐색 / 4h 이상 (디버깅만 3시간 한 듯) SWEA 2105.디저트 카페 ( 포스팅 ) 와 비슷한 문제처럼 보여서 쉽겠거니 하고 풀었는데, 테케조차 계속 틀리게 나와서 디버깅하느라 너무 힘들었다..ㅠ 풀고나서 다시 보니 너무 어렵게 생각했던 것 같다. 그래도 백트래킹 공부하기에는 좋은 문제인 듯.. 문제 링크 https://www.acmicpc.net/problem/17779 17779번: 게리맨더링 2 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름도 재현시로 변경했다. 이번 선거에서는 최대한 공평하게 선거구를 획정.. 2020. 3. 8.
[백준] 14502.연구소 (java) / 백트래킹, DFS, BFS, 조합 @백트래킹, DFS, BFS, 조합 / 29m (필기 15m 포함) 기본 문제라서 무난하게 풀었다. 문제 링크 https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크기가 N×M인 직사각형으로 나타낼 수 있으며, 직사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하좌우로 인접한 빈 칸으로 모두 퍼져나갈 수 있다. www.acmicpc.net 구현 방법 이 문제는 빈 칸.. 2020. 2. 25.
[백준] 14500.테트로미노 (java) / 백트래킹, DFS @백트래킹, DFS / 20m (6m 필기 포함) 예전에 두번 풀어봤던거라 풀이법을 알고 있어서 금방 풀었다(거의 외워서 푼 수준..ㅎ) 그렇지만 예전보다 더 간단하게 풀었다는 것에 의의를.. 문제 링크 https://www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다. 정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다. 아름이는 크기가 N×M인 종이 위에 테트로미노 하나를 놓으려.. 2020. 2. 24.
[백준] 17136.색종이 붙이기 (java) / 백트래킹, DFS @백트래킹, DFS / 45m (필기 15m 포함) 예전에 두번 풀어봤을 때 두번 다 실패했었는데(설명 듣고도) 오랜만에 풀었는데 한번에 풀어서 뿌듯했다ㅎㅎ 문제 링크 https://www.acmicpc.net/problem/17136 17136번: 색종이 붙이기 과 같이 정사각형 모양을 한 다섯 종류의 색종이가 있다. 색종이의 크기는 1×1, 2×2, 3×3, 4×4, 5×5로 총 다섯 종류가 있으며, 각 종류의 색종이는 5개씩 가지고 있다. 색종이를 크기가 10×10인 종이 위에 붙이려고 한다. 종이는 1×1 크기의 칸으로 나누어져 있으며, 각각의 칸에는 0 또는 1이 적혀 있다. 1이 적힌 칸은 모두 색종이로 덮여져야 한다. 색종이를 붙일 때는 종이의 경계 밖으로 나가서는 안되고, 겹쳐 www.ac.. 2020. 2. 24.
[백준] 16637.괄호 추가하기 (java) / DFS, 백트래킹, 조합, 시뮬레이션 @DFS, 백트래킹, 조합, 시뮬레이션 / 3h 이상 간단한 문제라고 생각했는데, 조합에서 한번 헤매고, 계산하는 곳에서 한번 더 헤매서 처음 맞았을때는 도대체 왜 맞는지도 이해가 안됐었다. 재귀를 이용한 DFS 백트래킹 조합을 공부하는 기회가 됐다. 구현 방법 DFS, 백트래킹을 이용한 조합 구현 1. 괄호를 놓을 수 있는 곳은 3+ 8* 7- 9*2 이 네 곳(== 배열크기 N / 2)이다. 그런데 빨간 칸에 연속해서 괄호를 배치할 수는 없으므로, 괄호 개수를 0부터 - 가능한 최대 개수 까지 놓되, 인접한(붙어있는) 칸은 뽑지 않는 조합을 구하기로 했다. 2. 그런데 이 조합을 구하는게 생각보다 너무 어려워서, 결국 실패하고 도움을 받았는데, 바로 이 방법이다. (더 나은 방법은 4번 참고) 1) .. 2020. 2. 10.