본문 바로가기

자바147

백준 6087 레이저 통신 자바 태그 : 다익스트라 새로운 테스트 케이스의 등장으로 맞힌 사람이 타노스되고 올바르지 않은 해답들이 돌아다녀, 글을 작성하게 되었다. 테스트 케이스의 등장 전에는 다익 조건에서 if(전의 거울 개수 >= 현재 거울 개수)로 2차원 배열을 선언하여, 중복으로 재탐색하는 풀이가 통과되었다. 하지만 이후는 메모리초과, 시간초과를 받게된다. (80퍼) 그렇다면, 어떻게 해야 하나. 바로 거울 개수를 저장하는 2차원 배열에서 각각의 방향을 추가하여 3차원 배열로 만들면 된다. [0][i][j] [1][i][j] [2][i][j] [3][i][j] ---> i, j에 4가지 방향의 거울의 개수가 담긴채로 다익스트라가 진행이 된다. 이렇게 되면 = 0 && j >= 0 && i < n && j < m) { if(c[i.. 2023. 3. 13.
백준 16402 제국 자바 유니온-파인드 문제 각각의 제국에서 속국이 왕국을 이기면 왕국의 속국을 자기 자신의 집합안에 넣는다. 왕국이 속국을 이기면 그대로 속국으로 넣는다. 생각보다 간단한 문제이지만, 파싱이나 문자열이 추가되서 난이도가 골드 2로 측정이 된것같았다. 개인적으로 높은 난이도의 문제는 아닌거같다. 발상이 어렵지 않다. 코드는 밑에 더보기를 클릭하시면 됩니다. 더보기 import java.io.*; import java.util.*; public class Main { static int[] parent; static int n; static int m; static Map m1; static Map m2; public static void main(String[] args) throws IOException { /.. 2023. 3. 4.
백준 20921 그렇고 그런 사이 자바 문제 : 수학, 구성적 처음 보고 나서 느낀건 시간이 4.242초와, N이 4242 K가 8995161이라는 점이다. 대충 보고, N제곱에 break때리면 아슬아슬하게 통과할 거같은 생각에.. 문제의 규칙을 찾으려고 노력했다. 앞 수가 뒤의 수보다 크면, 그렇고 그런사이가 되고, 이건 1개에 적용이아닌, 그 뒤의 수 모두에게 적용이된다. 보고나서, 정렬과 유사하다는 생각이 들었고, 정렬된 상태에서, 큰수가 k번만큼 움직인것과 같다고 판단했다. 따라서 while(k)만큼 돌면서 n번째의 이동을 1번할때마다 break해주었고.. 정말 아슬아슬하게 통과되었다. 코드는 밑에 더보기를 클릭하시면 됩니다. 더보기 import java.io.BufferedReader; import java.io.BufferedWri.. 2023. 2. 19.
백준 16956 늑대와 양 자바 에드혹 문제 늑대와 양문제는 쉬우면서, 간단하게 풀 수 있는 문제이다. 먼저 늑대가 양을 잡아먹을 수 밖에 없는 조건은 위, 아래, 왼쪽, 오른쪽으로 이동했을 때, 양이 있다면, 그 상황은 늑대가 양을 잡아 먹을 수 밖에 없는 상황이므로, 0을 출력하고 종료한다. 그 외의 상황에서는 나는 늑대를 위, 아래, 왼쪽, 오른쪽에 울타리를 설치해 늑대를 가두었다. 이후 다른 사람들의 풀이를 보면서.. 감탄을 했었는데, 그냥 '.'을 모두 울타리로 감싸면 된다. 코드는 밑에 더보기를 클릭하시면 됩니다. 더보기 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStrea.. 2023. 2. 17.
백준 4991 로봇 청소기 자바 BFS와 비트마스킹을 이용한 풀이 https://njchung99.tistory.com/3 백준 4991번 로봇 청소기 백준 4991번 로봇 청소기이 문제는 bfs를 사용하여 푸는 문제인데 그냥 bfs를 돌리면 visited를 계속 할 수 있는 조건이기 있기 때문에 그냥 bfs를 돌리면 안되고 현재 queue에서 어떤 먼지를 청소해 주 njchung99.tistory.com 처음에는 BFS를 가장 가까운 먼지에서 이동하는 것으로 풀이를 시작했지만, 그리디적인 풀이 방법이 아니게 되었고 사실 비트마스킹에 대한 개념자체가 없었던 나는 이 분의 풀이를 보고 어떤 방법으로 풀어야 하는지를 알게되었다. 그리고, 어떤 논리로 접근을 하셨는지 이해하고, 나또한 풀게 되었다. 너무 어렵고 어려웠던 문제, 블로그를 쓰며.. 2023. 2. 15.
백준 12887 경로 게임 자바 BFS 역추적 문제 현정이가 경로게임을 할 때, 경로에 지나갈 수 있는 하얀칸을 검은칸으로 최대한 바꾸고도, 맨 오른쪽으로 갈 수 있다면, 그것에 대한 최대 개수를 구하는 문제이다. 행의 개수가 2개여서, 생각보다 쉬운 문제이지만.. 처음 볼 때에는 역추적인지는 몰랐다. BFS에서 최단 경로를 탐색한다고 가정했을 때, 최단경로를 방문한 것을 역추적해서 검은 칸으로 칠한다. 그러면 남은 하얀칸은 모두 없앨 수 있는 최댓값이 된다. 코드는 밑에 더보기를 클릭하시면 됩니다. 더보기 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; impor.. 2023. 2. 14.
백준 14929 귀찮아 (SIB) 자바 누적합과 수학적인 개념이 들어간 문제로.. 1 부터 N까지의 곱의 합을 구해야 하므로.. n이 3까지 풀어서 써보면, x1 * x2 + x1 * x3 + x2 * x3 => answer이다. 그래서 이걸 묶어서 보면, (x2 + x3)x1 + (x3)x2이므로 누적합 배열을 구해서 그 배열과 원본 배열을 인덱스에 곱해주면 되는 문제이다. 근데 거꾸로 구할 필요없이 처음부터 역순으로 구해도 같은 값이므로 index가 0부터 시작해서 구해도 된다. 코드는 밑에 더보기를 클릭하시면 됩니다. 더보기 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamRead.. 2023. 2. 13.
백준 15591 MooTube 자바 BFS 문제 인접리스트를 이용해서, K이하가 되는 경우 추천 영상으로 올라간다. 따라서, 각각의 p, q, r를 양뱡향으로 인접리스트에 추가 해준뒤 BFS를 탐색하며, K이하가 될 경우 Count++를 통해 추가해주면 되는 문제이다! 코드는 밑에 더보기를 클릭하시면 됩니다. 더보기 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Queue; .. 2023. 2. 12.
백준 18429 근손실 자바 백트래킹 문제 하루마다 근손실이 나는 k 만큼 중량을 칠때 얻을 수 있는 c[i]의 값이 크다면, n까지 계속해서 탐색한다. n이 8로 작아서, 백트래킹을 이용해 모든 경우의 수를 비교해 주었다. 코드는 밑에 더보기를 클릭하시면 됩니다. 더보기 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTokenizer; public class Main { static boolean[] d; static int[] c; static Strin.. 2023. 2. 11.