본문 바로가기

Programmers/Lv.29

[프로그래머스] Lv.2 택배 배달과 수거하기 JAVA 풀이 문제 Lv.2 택배 배달과 수거하기 : 나열된 n개의 집에 택배를 배달 : 택배 상자 = 물류창고에 보관 ( i번째 집은 물류창고에서 거리 i만큼 떨어져 있다 ) (또한 i번째 집은 j번째 집과 거리 j - i만큼 떨어져 있습니다. (1 ≤ i ≤ j ≤ n) ) : 트럭 허용 범위 = 최대 cap개의 박스 ( 각 집에 배달 및 수거할 때 원하는 개수만큼 가능 ) : 트럭은 재활용 택배 상자들을 실어 각 집에 배달하면서 빈 상자들을 수거해 물류창고에 돌아오는 최소 이동거리 구하기 cap=4 일 때, 최소 거리로 이동하면서 5개의 집에 배달 및 수거 집1 집2 집3 집4 집5 배달 1 0 3 1 2 수거 0 3 0 4 0 집1 집2 집3 집4 집5 배달 / 수거 1/0 0/3 3/0 1/4 2/0 설 명 .. 2024. 2. 5.
[프로그래머스] Lv.2 n진수 게임 JAVA 풀이 문제 Lv.2 n진수 게임 : 여러사람이 둥글게 앉아 숫자를 차례대로 말하기 : 숫자 0부터 시작해서 순서대로 말하고 10 이상부터는 한자리씩의 숫자만 말하기 (예 10을 한명이 아닌 두명이 나눠서 말하는 것) : 이진수로 말하기도 가능 (0, 1, 1|0, 1|1, 1|0|0,,, 한자리수씩 끊어 읽기) : 입력: 진법 n, 구할 숫자 개수 t, 게임에 참가하는 인원 m, 튜브 순서 p 2 ≦ n ≦ 16 / 0 < t ≦ 1000 / 2 ≦ m ≦ 100 / 1 ≦ p ≦ m 1) 0 (= 0), 1 (= 1), 10 (= 2), 11 (= 3), 100 (= 4) 중 2명이 말하는데 그 중 첫번째 순서만 구해라 A: 0 → B: 1 → A: 1 - B: 0 → A: 1 - B: 1 → A: 1 - .. 2023. 11. 15.
[프로그래머스] Lv.2 두 큐 합 같게 만들기 JAVA 풀이 문제 Lv.2 두 큐 합 같게 만들기 : 길이가 같은 두 개의 큐 : 하나의 큐를 골라 원소를 추출(pop)하고 추출된 원소를 다른 큐에 집어넣는(insert) 작업 : 각 큐의 원소 합이 같도록 만드는 최소의 횟수 출력 어떤 방법으로도 같을 수 없다면 -1 출력 : 한 번의 pop과 한 번의 insert를 합쳐서 작업을 1회 수행한 것으로 간주 : 1 ≤ queue1의 길이 = queue2의 길이 ≤ 300,000 1 ≤ queue1의 원소, queue2의 원소 ≤ 109 주의: 언어에 따라 합 계산 과정 중 산술 오버플로우 발생 가능성이 있으므로 long type 고려가 필요 : 입력 예 queue1 = [3, 2, 7, 2] queue2 = [4, 6, 5, 1] 출력 예 result = 2 [코드.. 2023. 10. 10.
[프로그래머스] Lv.2 호텔 대실 JAVA 풀이 문제 Lv.2 호텔 대실 : 최소한의 객실만을 사용하여 예약 손님 받기 사용한 객실은 퇴실하고 10분간 청소를 한 다음 다른 손님들 사용가능 : 예약 시각 = book_time ( 문자열 형태 2차원 배열 ) 1 ≤ book_time의 길이 ≤ 1,000 book_time[i] = ["HH:MM", "HH:MM"] = [대실 시작 시각, 대실 종료 시각] 형태 : 예약 시각이 자정을 넘어가는 경우는 X 시작 시각은 항상 종료 시각보다 빠르다 : 입력 예 [["15:00", "17:00"], ["16,40", "18,20"], ["14:20", "15:20"], ["14:10", "19:20"], ["18:20", "21:20"]] : 출력 예 book_timeresult = 3 [알아두기] < Repla.. 2023. 10. 10.
[프로그래머스] Lv.2 과제 진행하기 JAVA 풀이 문제 Lv.2 과제 진행하기 : 해당 시각에 과제 시작 새로운 과제 시작할 시간이 되면 진행중이던 과제 중단하고 새 과제 시작 진행중이던 과제를 끝냈을 때 잠시 멈춘 과제가 있다면 멈춰둔 과제를 이어서 진행 과제를 끝낸 시각에 중단된 과제, 새 과제 둘 다 남아 있다면 새 과제부터 먼저 진행 : 과제 계획 = 2차원 배열 plans : plans = [name,start,playtime] : name = 과제 이름 (알파벳 소문자) start = 과제의 시작 시각 (hh:mm의 형태 "00:00" ~ "23:59") playtime = 과제 걸리는 시간 (단위는 분) : 진행중이던 과제가 끝나는 시간 = 새 과제 시작하는 시간 이면 진행중이던 과제는 끝난 것으로 판단 [코드] import java.uti.. 2023. 10. 2.
[프로그래머스] Lv.2 미로 탈출 JAVA 풀이 문제 Lv.2 미로 탈출 : 직사각형 격자 형태의 미로 벽으로 된 칸 이동 불가 통로로 된 칸 이동 가능 : 출력 = 입구-레버-출구까지 거치는 최소의 탈출 길이 (탈출할 수 없다면 -1 출력) : 출발 레버 출구 모두 따로따로 입구 → 레버 열기 위해 방문 → 나가기 위해 출구 방문 순으로 미로를 탈출한다 : 미로를 나타내는 문자열배열 = maps maps 자체는 길이가 5 ~ 100 maps 배열 중 한 묶음은 5개의 문자로 이루어짐 (S: 시작, E: 출구, L: 레버, O: 통로, X: 벽) Ex) maps = ["SOOOL", "XXXXO", "OOOOO", "OXXXX", "OOOOE"] 이때 maps의 길이는 5이다 [설명] BFS 현재 정점에 연결된 가까운 점들부터 탐색 Queue를 사용해.. 2023. 9. 19.
[프로그래머스] Lv.2 무인도 여행JAVA 풀이 문제 Lv.2 무인도 여행 : 지도 = 1 x 1 크기의 사각형으로 이루어진 직사각형 격자 형태 격자 구성 = X, 숫자 (1 ~ 9) - X = 바다 - 숫자 = 무인도 (상, 하, 좌, 우 붙어있는 애들은 하나의 무인도, 대각선은 다른땅) : 하나의 무인도 숫자 합 = 해당 무인도에서 최대로 머무를 수 있는 기한 (오름차순으로 출력) 무인도가 없는 경우 = -1 출력 : maps = 지도 (문자열 배열) [지도 배열 예시] [알고 가기] - 깊이 우선 탐색 - 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘 - 스택 or 재귀함수 이용 - 제일 깊게 내려간 뒤 더이상 갈 수 없을 때 옆으로 이동해서 다시 깊게 내려가기를 반복 - 구현 : DFS (간단) > BFS - 검색 속도 : .. 2023. 9. 4.
[프로그래머스] Lv.2 광물 캐기 JAVA 풀이 문제 Lv.2 광물 캐기(DFS) -   곡괭이로 광물을 캘 때 피로도 소모 -   캐기 시작하면 한 곡괭이로 광물 5개까지 연속 캐기  -   광물은 주어진 순서대로 캐기 -   광산에 있는 광물 모두 캐거나 사용할 곡괭이가 없을 때까지 캔다  [ 피로도 ]  [ 입력 ]  -   곡괭이 개수 : picks = [다이아, 철, 돌] (정수 배열) -   광물 순서: minerals (문자열 배열)  [알고 가기]   -  깊이 우선 탐색-  그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘-  스택 or 재귀함수 이용 -  제일 깊게 내려간 뒤 더이상 갈 수 없을 때 옆으로   이동해서 다시 깊게 내려가기를 반복-  구현 : DFS (간단) > BFS -  검색 속도 : BFS  > DFS (느림) .. 2023. 9. 4.
[프로그래머스] Lv.2 요격시스템 JAVA 풀이 문제 Lv.2 요격시스템 : 여러 개구간 x좌표가 있다 이들을 모두 한번씩 관통해야 한다 최소한으로 쏠 수 있도록 최대한 겹쳐 미사일을 쏜다 ▶ targets = [ 1, 4 ], [ 3, 7 ], [ 4, 5 ], [ 4, 8 ], [ 5, 12 ], [ 10, 14 ], [ 11, 13 ] : targets 는 미사일 좌표 범위 좌표는 x좌표로만 이루어져 있고 [s,e] 로 표현 가능 이때, [s,e]는 개구간이다 (즉, 시작지점과 끝지점 미포함) [문제 방식] 1. 끝지점을 기준으로 잡아서 오름차순으로 정렬하고 시작 2. 현재 구간의 끝지점과 다음 타겟의 시작점이 겹치지 않는 순간 count 더 이상 겹칠게 없기 때문에 다음 좌표들의 미사일 쏘고 구간 계산 (이해중요! 일단은 미사일 먼저 쏴놓고 구.. 2023. 8. 28.