본문 바로가기

c++3

[BOJ][C++] 17471 게리맨더링 문제 https://www.acmicpc.net/problem/17471 17471번: 게리맨더링 선거구를 [1, 4], [2, 3, 5, 6]으로 나누면 각 선거구의 인구는 9, 8이 된다. 인구 차이는 1이고, 이 값보다 더 작은 값으로 선거구를 나눌 수는 없다. www.acmicpc.net 풀이 두 팀으로 나누되, 갯수가 정해져있지 않은 조합 문제입니다. 코드가 다소 깔끔하지 못한 점 양해 부탁드립니다. 크게 세 단계로 나누어 풀이했습니다. 1. 두 팀으로 나누기 2. 나눠진 팀의 연결 상태 확인 3. 인구 차이 최소값인지 확인 1. 두 팀으로 나누기 (DFS) DFS로 팀을 나눕니다. team배열에 0과 1로 구분을 해줍니다. 이때, [0,0,0,1,1,1] 과 [1,1,1,0,0,0]은 같은 결.. 2020. 4. 16.
[BOJ][C++] 17135 캐슬 디펜스 문제 https://www.acmicpc.net/problem/17135 17135번: 캐슬 디펜스 첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다. www.acmicpc.net 풀이 5단계로 나누어서 구현을 했습니다. 그리 효율적인 것 같진 않은데, 더 좋은 방법이 있다면 공유해주세요! 1. 궁수 자리 배치(DFS) 2. 궁수들의 공격할 적 정하기(적이 모두 사라질 때까지 반복) 3. 공격받은 적 없애기 4. 적의 이동 5. 결괏값 확인 1. 궁수 자리 배치 조합으로 구현했습니다. 2. 궁수들의 공격할 적 구하기 궁수 자리 배치가 끝나고 cnt==3 조건이 만족되면, 궁수 3.. 2020. 4. 14.
[BOJ][C++] 14503 로봇청소기 [BOJ][C++] 14503 로봇청소기 풀이 1. 청소를 한다. 이 때 한 번 청소한 곳은 또 방문하면 안되기 때문에 visited를 이용합니다. 방향을 바꿀땐 사방을 다 탐색하면 후진해야하기 때문에 이를 cnt를 이용해 꼭 체크해줍니다. 1-1. map[nx][ny]가 청소할 수 있을 때 (map[nx][ny]==0 && visited[nx][ny]==0) : 다음 좌표, dir 바꾸어 func호출 1-2. map[nx][ny]가 청소할 수 없을 때 : 청소기의 방향 회전이 필요합니다. = dir, cnt+1 로 func호출 2. 후진해야 하는 경우 (cnt==4) cnt==4 일때는 사방이 벽이거나 청소를 한 경우입니다. 이 때, 후진을 해줘야하는데 후진을 할 수 있다면 다음 좌표로 옮기면 되고, .. 2019. 6. 25.