본문 바로가기

프로그래머스16

[프로그래머스] Lv.1 바탕화면 정리 JAVA 풀이 문제 Lv.1 바탕화면 정리 (배열 탐색)  : 컴퓨터 바탕화면은 각 칸이 정사각형인 격자판   컴퓨터 바탕화면의 상태를 나타낸 문자열 배열 = wallpaper   빈칸은 = "."   파일이 있는 칸 = "#"   최소한의 이동거리를 갖는 한 번의 드래그로 모든 파일을 선택해서 한 번에 지우기   드래그는 "점 S에서 점 E로 드래그한다"    "드래그 한 거리" = |rdx - lux| + |rdy - luy|      예)   wallpaper = [".#...", "..#..", "...#."]   S(0, 1)에서 E(3, 4)로 드래그하면 세 개의 파일이 모두 선택   드래그 한 거리 = (3 - 0) + (4 - 1) = 6을 최솟값 1 ≤ wallpaper[i]의 길이 ≤ 50모든 원소의.. 2024. 6. 28.
[프로그래머스] Lv.1 공원 산책 JAVA 풀이 문제 Lv.1 공원 산책 (방향 탐색 시뮬레이션)  :  지나다니는 길 O 장애물 X    ["방향거리", "방향거리"..]     "E 5" = 현재 위치에서 동쪽으로 5칸 이동했다는 의미     공원의 가로 길이가 W, 세로 길이가 H     공원을 나타내는 문자열 배열 park    명령이 담긴 문자열 배열 routes 3 ≤ park[i]의 길이 ≤ 50S : 시작 지점 (1개) O : 이동 가능한 통로X : 장애물1 ≤ routes의 길이 ≤ 50수행할 명령어routes의 원소는 "op n"과 같은 구조 (op는 이동할 방향, n은 이동할 칸의 수)N : 북 이동 / S : 남 이동 / W : 서 이동 / E : 동 이동1 ≤ n ≤ 9  [과정] - 2차원 배열 헷갈리지 말자!! - arr[행.. 2024. 6. 28.
[프로그래머스] 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 오픈채팅방 JAVA 풀이 문제 Lv.2 오픈채팅방 : 오픈채팅방에서는 닉네임을 사용 누군가 들어오면 "[닉네임]님이 들어왔습니다." 라고 출력 누군가 나간다면 "[닉네임]님이 나갔습니다." 라고 출력 : 닉네임 변경 방법 채팅방 나가고 새로운 닉네임으로 다시 들어오기 채팅방에서 닉네임 변경하기 닉네임이 변경되면 기존 메시지의 닉네임도 전부 변경 닉네임 중복가능 닉네임을 변경한 기록이 담긴 문자열 배열 = record 모든 기록이 처리된 후 최종 출력 결과를 문자열 배열 행태로 return 한다 : 1 ≤ record ≤ 100,000 모든 유저는 [유저 아이디]로 구분 [유저 아이디] 사용자가 [닉네임]으로 채팅방에 입장 - "Enter [유저 아이디] [닉네임]" (ex. "Enter uid1234 Muzi.. 2023. 11. 23.
[프로그래머스] 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.3 다단계 칫솔 판매 JAVA 풀이 문제 Lv.3 다단계 칫솔 판매 : 하위 직원이 칫솔 판매하면 10프로는 상사한테 넘긴다 (계속 반복하면서 center까지도 수익금 10% 전달) : 단 더이상 10%로 나눠지지 않는다면 되는 단계까지만 한다 - [enroll] : 모든 판매원의 이름을 담고 있는 배열 - [referral] : enroll배열과 연결된 직속 상사 "-" 표시가 있다면 제일 높은 상사 - [seller] : 판매한 직원 - [amount] : 판매한 칫솔 개수 (seller와 연결지어 보면 된다) 예시) enroll referral income john - 360 mary - 958 edward mary 108 sam edward 0 emily mary 450 jaimie mary 18 tod jaimie 180 youn.. 2023. 11. 2.
[프로그래머스] 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.1 크레인 인형뽑기 JAVA 풀이 문제 Lv.1 크레인 인형뽑기 : 게임화면 = N × N 격자 아래부터 차곡차곡 쌓여있음 크레인 위치를 좌우로 옮겨 가장 위에 있는 인형 집어올려 바구니에 넣는다 바구니에 같은 모양의 인형이 두 개 만나면 터져서 없어진다 (바구니는 모든 인형이 다 들어갈 수 있는 여유로운 크기이다) [예시문제] : 격자 = 2차원 배열 board, 크레인 위치 = moves : board = [0,0,0,0,0] [0,0,1,0,3] [0,2,5,0,1] [4,2,4,4,2] [3,5,1,3,1] : moves = [1,5,3,5,1,2,1,4] : result = 4 : 바구니 = [4,3,1,1,3,2,4] [코드] import java.util.*; class Solution { public int solution.. 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.