2023/09/28 4

[Programmers] 징검다리

난이도 : Level 4 문제링크 출발지부터 distance 만큼 떨어진 도착지점이 있고 그 사이에는 바위들이 놓여 있다. 최대 n개의 바위를 제거하였을 때, 각 바위 사이의 거리의 최솟값 중 가장 큰 값을 리턴하라. 해설 1. 바위 사이의 거리의 최솟값중 최댓값을 이분탐색 public int solution(int distance, int[] rocks, int n) { long left = 1, right = distance, mid = 0, answer = 0, prevRock = 0, rockCount = 0; Arrays.sort(rocks); while (left rock - prevRock) rockCount++; else prevRock = rock; } if (mid > distance ..

Algorithm/(Java) PS 2023.09.28

[Programmers] 입국심사

난이도 : Level 3 문제링크 입국심사를 위해 n명이 줄을 서있습니다. 가장 앞에 서있는 사람은 비어있는 심사대로 가서 심사를 받을 수 있습니다. 더 빨리 끝나는 심사대가 있으면 기다렸다가 그곳으로 가서 심사를 받을 수도 있습니다. 각 입국심사관이 심사하는데 걸리는 시간이 주어집니다. 입국심사관은 동시에 한명만 심사할 수 있습니다. 모든 사람이 심사를 받는데 걸리는 최소 시간을 리턴하세요. 해설 1. 심사에 걸리는 모든 시간을 대상으로 이분탐색 public long solution(int n, int[] times) { Arrays.sort(times); int count = 0; long minTime = 1, midTime = 0, maxTime = (long)times[0] * n; while ..

Algorithm/(Java) PS 2023.09.28

[BOJ] 수 찾기

난이도 : Sliver 4 문제링크 N개의 정수가 주어질 때, 이 안에 X라는 정수가 존재하는 지 여부를 리턴하라 해설 전체코드 보기 1. A배열 정렬하기 static int N, M; static int[] A, B; public static void main(String[] args) throws IOException { init(); Arrays.sort(A); for (int i = 0; i < M; i++) { binarySearch(i); } } 이분탐색을 활용하기 위해 A배열을 정렬합니다. 2. 이분탐색을 통해 검색하기 private static void binarySearch(int idx) { int left = 0, right = A.length-1; while (left B[idx])..

Algorithm/(Java) PS 2023.09.28

[BOJ] Maaaaaaaaaze

난이도 : Gold 2 문제링크 5*5 격자판이 5개 쌓인 3차원 미로가 존재한다 (5*5*5) 주어진 5개의 격자판을 임의의 순서대로 쌓아 퍼즐을 만든다. 맨 위 격자의 좌측 상단(0, 0)에서 맨 아래 격자의 우측 하단까지(4, 4) 도착하는데 걸리는 최단 이동 횟수를 구하라 격자는 회전가능하며, 벽은 이동할 수 없음 해설 전체코드 보기 1. 퍼즐을 만들 수 있는 모든 경우 탐색하기 private static void dfs(int depth, int[][][] curMaze) { if (depth == height) { if (curMaze[0][0][0] == 1 && curMaze[4][4][4] == 1) { int turn = bfs(curMaze, new boolean[height][row..

Algorithm/(Java) PS 2023.09.28