📖 문제 https://www.acmicpc.net/problem/16945 💡 풀이 방식• 백트래킹1. 3x3 배열에 모든 숫자 1-9를 중복되지 않게 나열한다.2. 나열 후, 해당 배열이 매직 스퀘어( = 가로,세로, /, \의 합이 모두15인지) 확인한다.3. 매직 스퀘어인 경우, 최솟값을 갱신해 정답을 구한다. 🔺 코드1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071import java.util.*;import java.io.*; public class Main { static int[][]..
📖 문제 https://www.acmicpc.net/problem/15886 💡 풀이 방식• 문자열E와 W가 붙어있는 문자열 EW의 갯수를 구하면 된다... 🔺 코드1234567891011121314151617181920212223import java.util.*;import java.io.*; public class Main { static int N, cnt; static char[] map; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); N = In..
📖 문제 https://www.acmicpc.net/problem/12100 💡 풀이 방식• 백트래킹 + 시뮬레이션 백트래킹으로 상하좌우 4방향에 대해 5회까지 다 이동시켜보고, 배열 내 가장 큰 수를 구한다. 🔸 void DFS(명령 횟수)[종료 조건] 명령 횟수가 5번인 경우, 배열 내 최댓값을 탐색하고, 이를 최댓값과 비교해 최댓값 갱신if(cnt == 5) { findMax(); return;} 그게 아닌 경우, 과정 1,2를 진행한다. 1) 원본 배열 map을 복사한다.int[][] copy = copyArray(map); 2) 상하좌우 4방향 중 이동 방향을 정하고, 해당 방향으로 이동시키고, 명령 횟수에 +1해 재귀호출을 진행한다. 그리고 이동시켰던 배열 값을 원상복구..
📖 문제 https://www.acmicpc.net/problem/21315 💡 풀이 방식• 브루트포스 🔺 코드1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980import java.util.*;import java.io.*; public class Main { static int N, K, K1, K2; static int[] input, deck; public static void main(String[] args) throws IOException..
📖 문제 https://www.acmicpc.net/problem/17085 💡 풀이 방식• 구현 & 브루트포스- 완전탐색으로 #인 위치에 첫 번째 십자가를 놓는다.- 현재 위치의 행과 열 중 큰 값의 크기의 십자가가 격자판에 놓일 수 있는지 확인한다. (crossChk 메소드)private static boolean crossChk(int y, int x, int size) { for(int d = 0 ; d - 놓을 수 있다면(crossChk == true), 2번째 십자가의 최대 크기를 탐색한다. (search 메소드)private static void search(int y, int x, int size) { int result = 0; for(int i = x+1..
📖 문제 https://www.acmicpc.net/problem/16943 💡 풀이 방식• 백트래킹 백트래킹으로 정수 A에 포함된 숫자들의 순서를 섞어 숫자 C를 만든다.이렇게 만든 숫자가 0으로 시작하지 않고, B보다 작은 경우, 정답과 비교해 더 큰 값으로 정답을 갱신한다. 💥 유의사항새롭게 만든 C를 문자열로 봤을 때 0으로 시작하는지 확인해야 한다. 🔺 코드123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657import java.util.*;import java.io.*; public class Main { static String[] st..
📖 문제 https://www.acmicpc.net/problem/14620 💡 풀이 방식• 브루트포스 + 백트래킹1. 격자를 입력받는다.2. 완전탐색으로 모든 점을 확인한다. 해당 지점에서 꽃을 심을 수 있는 경우, 해당 자리와 상하좌우 자리에 대해 꽃을 심어보고, 뽑은 갯수를 +1하고, 비용을 더한 후 재귀호출한다. 그리고 다음 탐색을 위해 해당 자리와 상하좌우 자리에 대해 값을 초기화한다. [x행 y열 위치에서 꽃을 심을 수 있는지 확인하는 함수 : boolean isPossible(int x, int y)]꽃을 심을 수 있는 조건 - 방문한 적 없어야 함 - 4방향 탐색 시 - 꽃잎이 배열 화단 범위를 벗어나선 안 됨 - 꽃잎 자리에 다른 꽃이 핀 경우(visited..
📖 문제 https://www.acmicpc.net/problem/5972 💡 풀이 방식• 다익스트라 전형적인 다익스트라 문제다,,- 최소 여물 비용 배열을 모두 5만*1000 + 1 이상의 큰 값으로 채운다.- 그래프 정보를 양방향으로 입력받는다.- 시작점 1부터 목적지 N까지 최소 비용으로 이동하도록 다익스트라를 진행한다. 🔺 코드123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778import java.util.*;import java.io.*; public class Main {..
📖 문제 https://www.acmicpc.net/problem/17396 💡 풀이 방식• 다익스트라필요 자료구조- 시야에 보이는지 여부 나타내는 1차원 boolean형 배열- 그래프 인접 리스트- 1 ~ N-1번 분기점이 까지 0번째 분기점까지 가는 데 걸리는 최소 시간 배열 (long형)- 분기점 별 방문 표시를 나타내는 1차원 boolean형 배열 1. 각 분기점이 적의 시야에 보이는지 나타낸다.sight = new boolean[N];st = new StringTokenizer(br.readLine(), " ");for(int i = 0 ; i 2. 1 ~ N-1번 분기점이 까지 0번째 분기점까지 가는 데 걸리는 최소 시간 배열을 모두 최댓값인 Long.MAX_VALUE로 초기화한..