
브루트포스 문제입니다. 2048게임의 규칙에 따라서 각 위치에 숫자들이 주어졌을때 5번 움직여서 만들 수 있는 가장 큰 수를 구하는 문제입니다. 각 위치에서 상, 하, 좌, 우 4방향으로 5번 움직일 수 있으므로 4^5 경우의 수를 계산해주어야 합니다. 예외처리에서 시간을 많이 사용했는데 주로 사용한 테스트 케이스로는 아래와 같습니다. 3 1 0 1 0 0 0 1 0 1 ans = 4 각 상하좌우로 한번 씩 움직일 경우 아래와 같이 나오는지 console에 찍어보면서 확인했습니다. 2 0 2 (상) 0 0 0 0 0 0 0 0 0 (하) 0 0 0 2 0 2 2 0 0 (좌) 0 0 0 2 0 0 0 0 2 (우) 0 0 0 0 0 2 import java.util.Scanner; import java...

시뮬레이션 문제입니다. 뱀이 행동할 규칙들을 설정해주고 게임이 끝나는 시간을 출력하는 문제입니다. 뱀의 초기 몸 길이는 1이고 사과를 먹으면 1씩 더 길어집니다. 뱀이 본인의 몸 이나 벽과 닿으면 게임이 종료됩니다. import java.util.Scanner; import java.util.Queue; import java.util.LinkedList; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] arr = new int[n+2][n+2]; int k = sc.nextInt(); int y, x; int l; int[] ..

연구소에서 바이러스가 퍼질 때 3개의 벽을 세워서 만들 수 있는 가장 많은 안전구역 수를 구하는 문제입니다. 가능한 모든 경우에 대해서 벽을 세워보았습니다. 그리고 세워진 상태에서 BFS방식으로 독이 퍼진후 안전구역을 계산해주었습니다. 가장 많은 안전구역이 있는 경우를 갱신해주어서 출력해주었습니다. import java.util.Scanner; import java.util.Queue; import java.util.LinkedList; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int[][] m..

다이나믹 프로그래밍 문제입니다. 각 날짜마다 할 수 있는 상담이 주어졌을때 최대한의 이익을 계산하는 문제입니다. 점화식을 세울 수 있습니다. DP[i+day[i]] = Math.max(DP[i+day[i]], DP[i] + pay[i]); DP[현재 날의 상담 기간을 계산했을 때 끝나는 날] = max(DP[현재 날의 상담 기간을 계산했을 때 끝나는 날], DP[현재 날까지 계산된 값] + pay[현재 날 상담을 통해 얻는 값]) DP[i+1] = Math.max(DP[i+1], DP[i]); 다음날의 계산된 결과 값, 오늘날의 계산된 결과 값 중 큰 값을 다음날 값에 삽입 위의 식들을 통해 최종적으로 가장 많이 얻을 수 있는 금액을 찾아낼 수 있습니다. import java.util.Scanner; p..

이진수로 이루어진 암호들로 어떤 단어가 나올지 출력하면 됩니다. 6자리의 이진수는 하나의 글자를 가르킵니다. 6자리 중 하나의 숫자가 틀려도 해당 글자로 인식합니다. 2개 이상 틀릴경우 판단할 수 없으므로 틀린 위치의 번호를 출력해주었습니다. 비트 연산을 통해서 이진수를 처리해주었습니다. import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int[][] arr = new int[8][7]; int n = sc.nextInt(); String s = sc.next(); String ans = ""; char c; int bit; boolea..

5가지 작동방식의 CCTV가 주어졌을때 각각 방향을 설정해서 사각지대를 최소한으로 만드는 문제입니다. CCTV는 벽을 통과할수 없으며 사무실의 크기는 최대 8*8에 CCTV의 수도 8개이므로 완전탐색을 하였습니다. CCTV가 볼 수 있는 모든 방향에 대한 상태에 값을 비교해서 사각지대가 가장 적은값을 결과값으로 출력해주었습니다. import java.util.*; public class Main { public static int n; public static int m; public static int[][] arr; public static int[][] arrTmp; public static int[][] cctv = {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1,..

재귀함수 문제입니다. 자바의 경우 " 를 출력하기 위해서 \"를 사용하면 됩니다. import java.util.*; public class Main { public static int n; public static void main(String argc[]){ Scanner sc = new Scanner(System.in); n = sc.nextInt(); System.out.printf("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.%n"); func(0); } public static void func(int cnt) { String s = ""; for(int i=0; i

6개의 문자중 3개를 선택하는 조합으로 3줄을 만들고 나머지 3개의 문자가 세로로 존재하는지 확인해주는 방식으로 문제를 해결하였습니다. Arrays.sort()함수를 통해서 정렬을 해주어서 답이 여러개일 경우 가장 빠른 단어로 나열해주었습니다. import java.util.*; public class Main { public static void main(String argc[]){ Scanner sc = new Scanner(System.in); String[] arr = new String[6]; boolean[] visit = new boolean[6]; boolean[] visit2 = new boolean[3]; int chk; String[] s = new String[3]; String[]..