본문 바로가기

시뮬레이션5

[백준] 14503 로봇 청소기 (Java) [14503 로봇 청소기] 난이도: 골드5 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어 www.acmicpc.net 문제 입력 출력 [아이디어] 문제에 써있는 설명대로 코드를 작성해주면 되는 시뮬레이션 문제이다. 조심해야되는 부분은 후진할 때는 청소를 한 장소여도 후진할 수 있다. 그리고 후진한 후 청소를 다시 해주면 안된다는 것이다. 청소하지 않은 장소인 경우에만 청소해주자. [JAVA 코드] package bj.g5; import java.io.*; import java.util.*; public class BJ_G5_14503_.. 2022. 6. 6.
[백준] 17779 게리맨더링2 (Java) [17779 게리맨더링2] 난이도: 골드4 17779번: 게리맨더링 2 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름 www.acmicpc.net 문제 입력 출력 [아이디어] 가능한 모든 경우들을 완탐으로 풀었다. 1, 2, 3, 4번 선거구역을 나눠주고 해당되지 않는 구역을 5번 구역으로 판단해서 값을 구해줬다. 여기서 선거구역을 나눌 때 경계선의 꼭지점들을 기준으로 판단해주었다. 예를 들면, x = 4, y = 3, d1 = 1, d2 = 1 의 경우 1번 선거구역을 찾기 위해 (x, y) => (4, 3) 을 기준으로 위에 있는 칸들을 먼저 찾아주고 r이 3이하인 .. 2022. 6. 3.
[백준] 18405 경쟁적 전염 (Java) [18405 경쟁적 전염] 난이도: 골드5 18405번: 경쟁적 전염 첫째 줄에 자연수 N, K가 공백을 기준으로 구분되어 주어진다. (1 ≤ N ≤ 200, 1 ≤ K ≤ 1,000) 둘째 줄부터 N개의 줄에 걸쳐서 시험관의 정보가 주어진다. 각 행은 N개의 원소로 구성되며, 해당 위치 www.acmicpc.net 문제 입력 출력 [아이디어] 사방으로 바이러스가 퍼져나가므로 BFS를 활용하면 된다. 이 때, 매 초다마 번호가 낮은 종류의 바이러스부터 증식하므로 단순 Queue를 사용하면 구현이 조금 복잡해질 수 있다. 따라서 나는 우선순위 큐를 사용해주었다. Point 클래스를 생성하여 바이러스의 위치, 종류, 걸린시간을 관리해주었고, 시간과 바이러스 종류로 우선순위를 정해주었다. 그 후는 일반 BFS.. 2022. 5. 5.
[백준] 2636 치즈 (Java) [2636 치즈] 난이도: 골드4 2636번: 치즈 첫째 줄에는 사각형 모양 판의 세로와 가로의 길이가 양의 정수로 주어진다. 세로와 가로의 길이는 최대 100이다. 판의 각 가로줄의 모양이 윗 줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진 www.acmicpc.net 문제 입력 출력 [아이디어] 이 문제는 BFS를 사용하면 된다고 바로 감이 올 것이다. 하지만 어려운 부분은 어떻게 외부 공기가 닿는 부분만 체크를 하는가이다. 문제를 해결하는 방법은 거꾸로 생각하기이다. 보통 치즈를 너비 우선 탐색하는 방법을 사용하지만, 이 문제는 바깥의 공기를 너비 우선 탐색하여 체크해주는 것이 포인트이다. 먼저 바깥의 공기를 너비 우선 탐색해서 어느 부분이 공기인지 체크해준다. 그 후 전체를 탐색하면서 치즈인 경우.. 2022. 4. 17.
[백준] 14891 톱니바퀴 (Java) [14891 톱니바퀴] 난이도: 골드5 14891번: 톱니바퀴 첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터 www.acmicpc.net 문제 입력 출력 [아이디어] 톱니바퀴를 돌릴 때 재귀를 활용하였다. 왼쪽 톱니바퀴가 회전하는지를 판단할 때는 아래와 같이 코드를 작성하였다. // 왼쪽 톱니바퀴 회전 여부 판단 if(gear > 1 && !visited[gear - 1] && gears[gear][6] != gears[gear - 1][2]) { // 맞닿은 톱니의 극이 다르다면 rotate(gear - 1, dir * -1); // 왼쪽 톱니바퀴를 d.. 2022. 4. 17.