문제 링크 1600번: 말이 되고픈 원숭이 첫째 줄에 정수 K가 주어진다. 둘째 줄에 격자판의 가로길이 W, 세로길이 H가 주어진다. 그 다음 H줄에 걸쳐 W개의 숫자가 주어지는데, 0은 아무것도 없는 평지, 1은 장애물을 뜻한다. 장애물이 있 www.acmicpc.net 문제 설명 (0, 0)에서 (H-1, W-1)까지의 최소 거리 단, 이동을 상하좌우 + K번만큼의 말의 이동 입력 K: 원숭이가 말의 이동방법으로 이동할 수 있는 횟수 W: 너비 H: 높이 출력 원숭이의 동작수의 최솟값, 시작점에서 도착점까지 갈 수 없는 경우엔 -1 출력 구조화 (0, 0)부터 bfs 말의 이동 방식으로 이동한 횟수가 K보다 작다면 말의 이동 방식으로 이동 방문체크 시에 이동한 횟수만큼의 배열을 만들어 각 경우의 수를..
구조화 전체 치킨집에서 M개 조합 조합마다 각 집의 최소 치킨 거리의 합(도시의 치킨 거리) 구함 최종적으로 최소 도시의 치킨 거리 출력 소스 코드 import java.io.*; import java.util.*; /* * 치킨집의 조합 * 1: 집 * 2: 치킨집 * 각 집마다의 치킨거리 구하기 */ public class Main { static int N, M, result = Integer.MAX_VALUE; static int[][] map; static int[][] pick; static List house = new ArrayList(); static List chicken = new ArrayList(); public static void main(String[] args) throws..
구조화 벽을 부수고 움직일 수 있는 한 번의 기회가 있음 [x][y][0] → 벽을 안 부수고 이동 [x][y][1] → 벽을 한 번 부숨 if [x][y][1]이 true고 map[nx][ny] == 1 → 안됨 소스 코드 import java.io.*; import java.util.*; public class Main_2206_벽부수고이동하기 { static int N, M, result; static char[][] map; static boolean[][][] visited; // 상 하 좌 우 static int[][] way = {{-1,0},{1,0},{0,-1},{0,1}}; public static void main(String[] args) throws IOException { Sys..
구조화 bfs start(수연이의 좌표) → end(여신님 좌표) 악마의 손아귀는 한 턴마다 *를 찾아 퍼지게 만들기 장애물은 ‘X’ 순서 ‘S’ 수연 좌표 이동 장애물 접근 X ‘*’ 악마의 손아귀 범위내에 들어가면 GAME OVER ‘D’ 여신님의 좌표에 도착하면 bfs 끝 악마의 손아귀 ‘*’ 찾아서 인접 행열에 퍼트리기 소스 코드 package day1006; import java.io.*; import java.util.*; public class Solution_7793_오나의여신님 { static int T, N, M; static char[][] map; static boolean[][] visited; static int suX, suY; static int godX, godY; stat..
구조화 연산자 갯수 배열을 순열 사용하여 경우의 수 만들기 Boolean 배열 대신 배열의 값을 --하면서 중복 해결 연산자는 0: +, 1: -, 2: *, 3: / 로 정함 switch문 사용하여 각각의 연산자로 계산 소스 코드 import java.io.*; import java.util.*; public class Solution { static int T, N; static int min = Integer.MAX_VALUE; static int max = Integer.MIN_VALUE; // 0: +, 1: -, 2: *, 3: / static int[] operator; static int[] numbers; static int[] result; public static void main(S..
구조화 행, 열 거리가 가까운 고객 찾기 고객이면 2, 3, 4... 도착지는 n-2번째 배열로 [0][1][2] 짝을 이루게 설정 고객까지 가기 이동 시엔 연료 - 도착 후 이동 경로만큼 연료 + 도착 후는 if(map[nx][ny]>1) → 고객을 만남 고객부터 목적지까지 bfs 목적지 도달하면 연료+이동 경로 소스 코드 import java.io.*; import java.util.*; public class Main { static int N, M, E, cuCnt, taCnt, max = Integer.MAX_VALUE; // N: 행, 열 M: 고객수 E: 연료량 static int[][] map, distance; // static boolean[][] visited; static int s..
문제 링크 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 문제 설명 벽 3개를 설치해 바이러스가 가장 적은 상태(안전 영역이 큰 상태)에서의 안전 영역의 크기를 구하는 문제 입력 N×M의 맵이 주어진다. 이때 0은 빈칸, 1은 벽, 2는 바이러스 출력 바이러스가 가장 적은 상태(안전 영역이 큰 상태)에서의 안전 영역의 크기를 출력 즉, map에서의 '0' 개수 구조화 0(빈칸)에 벽 세우고 안전 영역 크기 체킹, 벽은 3개만 세울 수 있음 => 0(빈칸)에서 3개의 조합 sudo 코드 1. 0(빈칸) 중에 3개를 골라 벽..