Algorithm/baekjoon 126

로봇

📍 문제 설명 💡 접근 명령이 순차적으로 진행되는게 아니라 각각 진행됨에 유의를 해야한다. 해당 좌표에 방문했더라도 가리키고 있는 방향이 다를 수 있으니 이 문제에서도 3차원배열을 사용했다. 👩‍💻 코드 import java.util.*; public class Main { static int n, m, answer, cnt, max, min; static int startRobotX, startRobotY, startRobotDireciton, endRobotX, endRobotY, endRobotDireciton; static int Hx, Hy, Ex, Ey; static int[][] board, clone; static boolean[][][] visited; static int[][] dis;..

Algorithm/baekjoon 2022.01.24

미로탈출

📍 문제 설명 💡 접근 처음에는 지팡의 갯수중에 1개를 뽑는 조합 문제라고 생각했는데, 범위가 작은 편이 아니었다. 방문체크하는 배열에 지팡이 사용 여부도 추가한 3차원 배열을 이용했다. 이렇게 하면 지팡이 사용하지 않았을 때 / 한 지점에 대해 지팡이를 사용하여 길을 뚫은 모든 경우에 대한 최단 경로가 나온다. 👩‍💻 코드 import java.util.*; public class Main { static int n, m, answer, cnt, max, min; static int Hx, Hy, Ex, Ey; static int[][] board, clone; static int[][] dis; static boolean[][] visited,successRoute; static int[] paren..

Algorithm/baekjoon 2022.01.24

탈출

📍 문제 설명 💡 접근 '고슴도치는 물이 찰 예정인 칸으로 이동할 수 없다.' 는 조건만 잘 처리해주고 물이 먼저 이동하도록 하면 풀리는 문제였다. 👩‍💻 코드 import java.util.*; public class Main { static int n, m, h, k, answer, cnt, max, min, wall, result = Integer.MAX_VALUE; static char[][] board, clone; static int[][] dis; static boolean[][] visited,successRoute; static int[] parent = new int[100001]; static int[] ch,pm, combi, graph; static boolean flag = fa..

Algorithm/baekjoon 2022.01.24

미로 탈출하기

📍 문제 설명 💡 접근 단순하게 방문했던 곳을 방문했을 경우만 처리를 해주면 시간초과가 나는 문제였다. 각 좌표에서 문자에 따라 방문할 때 해당 좌표를 거쳐간 경로가 탈출 가능 경로인지 불가능 경로인지를 입력해두면 다른 좌표에서 방문할 때 거쳤던 경로의 탈출 가능 여부에 따라 바로 리턴시켜줄 수 있으므로 효율적으로 탐색이 가능해진다. 👩‍💻 코드 import java.util.*; public class Main { static int n, m, h, k, answer, cnt, max, min, wall, result = Integer.MAX_VALUE; static char[][] board, clone, dis; static boolean[][] visited,successRoute; static ..

Algorithm/baekjoon 2022.01.23

연구소2

📍 문제 설명 💡 접근 이전 문제와는 다르게 바이러스를 놓을 수 있는 위치가 주어지고 해당 위치에 따른 바이러스 전파 시간을 구하는 문제이다.(조합) 조합을 만들 때 마다 해당 좌표에서 전파시키기 위해 리스트에 담는다. 해당 위치는 거리 기록을 위해 0으로 변경시켜 놓는다. 시작 지점을 표시해놓기 위해 시작 지점을 1의 거리로 초기화 시켜 놓는다. 그리고 상하좌우로 벽이 아니고 거리 기록이 가능한 지점이면 거리를 기록해놓는다. 모든 기록이 끝난 후 거리 기록이 안된 곳(0인 지점)이 있으면 최댓값을 대입하고 멈춘다. 그게 아니라면 거리 중 최댓값(바이러스 전파가 끝나는 시간)을 구한다. 각 조합에 대한 최솟값을 result에 담아두고 결과 출력시에는 result-1로 출력한다. 그리고 result가 최댓..

Algorithm/baekjoon 2022.01.23

연구소

📍 문제 설명 💡 접근 이코테에서 풀었던 문제다. 이코테에 있던 코드가 메모리 측면에서 5배 정도 좋게 나왔다. 이유는 벽을 세울 때 마다 값을 복사하는 배열을 생성해주어서였다.. 👩‍💻 코드 import java.util.*; public class Main { static int n, m, h, k, answer,cnt, max, min, wall, result; static int[][] board, clone; static int[] visited = new int[100001]; static int[] parent = new int[100001]; static int[] ch,pm, combi; static boolean flag = false; static int[] dx = {-1,1,0,0..

Algorithm/baekjoon 2022.01.23

종이의 개수

📍 문제 설명 💡 접근 N이 3^k 꼴이라는 조건이 주어져서 주어진 예시를 이용해서 풀 수 있었다. 해당 영역의 숫자들이 같은지 판단 후 같다면 종이로 사용해서 끝내고 아니라면 잘라서 다시 판단한다. 👩‍💻 코드 import java.util.*; public class Main { static int n, m, h, k, answer,cnt, max, min, red, yellow, orange; static int[][] board; static int[] dis = {-1,1,2}; static int[] visited = new int[100001]; static int[] parent = new int[100001]; static int[] ch,pm, combi; static boolean f..

Algorithm/baekjoon 2022.01.23

숫자판 점프

📍 문제 설명 💡 접근 이동한 횟수, 붙인 문자열을 인자로 DFS 수행해주면 된다. 👩‍💻 코드 import java.util.*; public class Main { static int n, m, h, k, answer,cnt, max, L, R, C; static int[][] board, dis; static boolean[][][][] visited; static int[] ch,pm, combi; static boolean flag = true; static int[] dx = {-1,1,0,0}; static int[] dy = {0,0,-1,1}; static HashSet set = new HashSet(); public static void main(String[] args) { Main..

Algorithm/baekjoon 2022.01.22

숨바꼭질4

📍 문제 설명 💡 접근 2 문제와는 다르게 가짓수가 아닌 이동하는 경로를 출력하는 문제다. 다음지점의 인덱스에 현지점(부모) 인덱스를 집어넣고 스택에 해당 값들을 거꾸로 넣어놓고 출력하면된다. 👩‍💻 코드 import java.util.*; public class Main { static int n, m, h, k, answer,cnt, max, min, L, R, C = Integer.MAX_VALUE; static int[][] board; static int[] dis = {-1,1,2}; static int[] visited = new int[100001]; static int[] parent = new int[100001]; static int[] ch,pm, combi; static boole..

Algorithm/baekjoon 2022.01.22

숨바꼭질2

📍 문제 설명 💡 접근 가장 빠른 시간이 몇 초 후 인지, 가장 빠른 시간으로 찾는 방법이 몇 가지 인지 한가지만 구하는게 아니라 두가지 동시에 구해야되는 문제여서 조금 생각을 했다. 중복인 지점을 걸러내야하지만 동일한 시간에 방문한 지점이면 답이 될수도 있기때문에 해당 조건을 넣어야만 했다. 👩‍💻 코드 import java.util.*; public class Main { static int n, m, h, k, answer,cnt, max, min, L, R, C, second = Integer.MAX_VALUE; static int[][] board; static int[] dis = {-1,1,2}; static int[] visited = new int[200]; static int[] ch,..

Algorithm/baekjoon 2022.01.22