본문 바로가기

BOJ2

[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++] 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.