문제 링크 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 문제 설명 N개 중 절반을 조합으로 뽑아 두개의 그룹으로 나눠 그룹의 능력치 차이가 가장 적은 경우 구하기 입력 N: 총 인원수 Sij: i번 사람과 j번 사람이 같은 팀에 속했을 때, 팀에 더해지는 능력치 Sji: j번 사람과 i번 사람이 같은 팀에 속했을 때, 팀에 더해지는 능력치 Sij와 Sji는 다를 수도 있음, Sii는 항상 0 출력 그룹의 능력치 차이가 가장 적은 경우에서의 능력치 차이값 구조화 N개 중에 N/2개를 조합으로 뽑아 두 그룹으로 나눔 각 그룹별로 능..
문제 링크 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..
구조화 가장 높은 수부터 시작해서 작을 때만 이동 가능 특이케이스) 딱 한번 최대 -K를 해서 이동 가능 -> 1~K까지 빼서 모든 케이스 돌리기 0까지만 가능하고 음수는 안됨 소스 코드 import java.io.*; import java.util.*; public class Solution { static class Node{ /* * x, y 좌표 * num 해당 값 * flag 깎음 유무 */ int x, y, num; boolean flag; public Node(int x, int y, int num, boolean flag) { super(); this.x = x; this.y = y; this.num = num; this.flag = flag; } } static int T, N, K, t..
구조화 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..