프로그래머스 글 모음
총 57개의 글이 있습니다.
택배상자
order 배열은 택배 기사님이 원하는 상자 적재 순서다 기존 컨테이너 벨트는 1번부터 순서대로만 꺼낼 수 있다 보조 벨트는 스택처럼 마지막에 넣은 것부터 꺼낼 수 있다 원하는 순서대로 최대한 실을 수 있는 상자 개수를 구하는 문제다 처음에는 기존 벨트를 실제 리스트로 만들어…
롤케이크 자르기
topping 배열은 롤케이크에 일렬로 올라간 토핑 번호다 한 지점을 잘라 두 조각으로 나눴을 때, 양쪽 토핑 종류 수가 같아야 공평하게 나눈 것이다 공평하게 자를 수 있는 방법의 수를 구하는 문제다 처음에는 자르는 위치마다 왼쪽과 오른쪽 배열을 나눠서 각각 서로 다른 토핑…
할인 행사
want, number 배열로 정현이가 원하는 제품과 수량을 표현한다 discount 배열은 XYZ 마트가 매일 할인하는 제품 목록이다 연속된 10일 동안 할인 제품 종류와 수량이 want, number와 정확히 일치해야 회원가입할 수 있다 그런 시작일이 총 몇 번 있는지…
숫자 변환하기
자연수 x를 y로 바꾸는 데 x+n, x2, x3 세 가지 연산을 쓸 수 있다 x를 y로 바꾸는 최소 연산 횟수를 구하는 문제다 만들 수 없으면 -1을 반환한다 처음에는 x에서 시작해서 세 가지 연산을 재귀적으로 다 시도해보고 y에 도달하는 경로 중 가장 짧은 걸 고르면…
두 원 사이의 정수 쌍
원점이 중심인 두 원이 있고 반지름은 각각 r1, r2다 (r1 < r2) 두 원 사이 공간에서 x, y 좌표가 모두 정수인 점의 개수를 구하는 문제다 원 위의 점도 포함해서 센다 처음에는 x, y 좌표를 이중 for문으로 전부 돌면서 각 점이 두 원 사이에 있는지 판별하면…
두 큐 합 같게 만들기
길이가 같은 두 큐 queue1, queue2가 주어진다 한 큐에서 원소를 꺼내(pop) 다른 큐에 넣는(insert) 것을 합쳐 작업 1회로 센다 이 작업을 반복해서 두 큐의 원소 합을 같게 만드는 최소 횟수를 구한다 불가능하면 -1을 반환한다 큐 길이는 최대…
더 맵게
스코빌 지수가 가장 낮은 두 음식을 골라 가장 낮은 값 + 두 번째로 낮은 값 * 2 로 섞는다 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복한다 모든 음식을 K 이상으로 만들 수 없으면 -1을 반환한다 처음에는 매번 배열을 정렬해서 가장 작은 두 값을 찾아 섞고,…
가장 큰 수
0 또는 양의 정수 배열이 주어진다 배열의 숫자를 순서대로 이어 붙여 만들 수 있는 가장 큰 수를 문자열로 반환한다 정답이 클 수 있어서 문자열로 반환한다 처음에는 숫자를 그냥 큰 값부터 정렬해서 이어 붙이면 될 거라 생각했다. 하지만 이 방식은 틀렸다.
구명보트
구명보트는 한 번에 최대 2명, 무게 제한 limit이 있다 모든 사람을 구출하는 데 필요한 구명보트 개수의 최솟값을 구한다 무게 제한은 항상 사람들 몸무게의 최댓값보다 크게 주어진다 처음에는 가장 무거운 사람부터 순서대로 보면서, 그 사람과 함께 탈 수 있는 사람을 나머지…
멀리 뛰기
한 칸 또는 두 칸씩 뛰어 n칸 끝에 도달하는 방법의 수를 구한다 답은 1234567로 나눈 나머지를 반환한다 n은 최대 2000 처음에는 재귀로 모든 경우를 직접 세어보면 될 줄 알았다.
방금그곡
기억한 멜로디 m과 방송된 곡들의 정보(musicinfos)가 주어진다 각 곡은 시작·종료 시각만큼 처음부터 반복 재생된 것으로 간주한다 재생된 악보 안에 m이 그대로 들어있는 곡 중, 재생 시간이 가장 긴 곡의 제목을 찾는다 일치하는 곡이 없으면 "(None)"을 반환한다…
사라지는 발판
A와 B가 번갈아 발판 위의 캐릭터를 상하좌우로 움직인다 캐릭터가 떠난 발판은 사라진다 이동할 수 없으면 그 차례 플레이어가 패배한다 이길 수 있는 플레이어는 최대한 빨리, 질 수밖에 없는 플레이어는 최대한 오래 버티도록 플레이했을 때 총 이동 횟수를 구한다 처음에는 각…
표 병합
50 × 50 표에서 UPDATE, MERGE, UNMERGE, PRINT 명령을 순서대로 처리한다 MERGE는 두 셀을 하나로 합치고, 값이 있으면 그 값을 유지한다 UNMERGE는 선택한 셀이 속한 병합 그룹 전체를 원래 상태로 되돌린다 PRINT 결과들을 순서대로 배열에…
야근 지수
남은 작업량 배열 works와 일할 수 있는 시간 n이 주어진다 매 시간 작업량 하나를 1만큼 줄일 수 있다 야근 피로도는 남은 작업량들의 제곱의 합이다 n시간을 모두 사용해 피로도를 최소화한 값을 구한다 처음에는 매 시간마다 배열을 순회해서 가장 큰 작업량을 찾아 1을 깎는…
연속된 부분 수열의 합
비내림차순으로 정렬된 수열 sequence와 목표 합 k가 주어진다 합이 k인 연속 부분 수열 중 길이가 가장 짧은 것을 찾는다 길이가 같으면 시작 인덱스가 더 작은 쪽을 찾는다 처음에는 모든 구간의 합을 완전탐색으로 구해서 k와 비교하면 되겠다고 생각했다.
수식 복원하기
덧셈 또는 뺄셈 수식이 문자열 배열 expressions로 주어진다 사용된 진법은 2 ~ 9진법 중 하나이지만 어떤 진법인지는 알 수 없다 결괏값이 X로 지워진 수식의 값을 채워 넣는다.
호텔 대실
예약 시간이 담긴 2차원 배열 book_time이 주어진다 퇴실 후 10분간 청소를 해야 다음 손님을 받을 수 있다 필요한 최소 객실 수를 구한다 처음에는 예약을 시간 순으로 정렬한 뒤, 새 예약이 들어올 때마다 이미 사용 중인 객실을 하나씩 비교해서 겹치지 않는 방이 있는지…
요격 시스템
폭격 미사일의 x 좌표 범위가 개구간 (s, e)로 주어진다 요격 미사일 하나는 특정 x 좌표에 걸쳐있는 모든 폭격 미사일을 관통해서 요격한다 모든 폭격 미사일을 요격하는 데 필요한 최소 요격 미사일 수를 구한다 처음에는 모든 폭격 미사일 쌍을 비교해서 겹치는 것끼리 묶으면…
뒤에 있는 큰 수 찾기
정수 배열 numbers가 주어진다 각 원소에 대해 자신보다 뒤에 있으면서 더 큰 값 중 가장 가까운 수를 찾는다 그런 수가 없으면 -1을 담는다 처음에는 각 원소마다 자신보다 뒤에 있는 원소들을 순서대로 훑으면서 처음 만나는 더 큰 값을 찾으면 되겠다고 생각했다.
퍼즐 게임 챌린지
퍼즐을 순서대로 풀며, 숙련도 level이 난이도 diff보다 낮으면 diff - level번 틀린다 한 번 틀릴 때마다 현재 퍼즐 시간 time_cur과 이전 퍼즐 시간 time_prev를 합쳐서 소비한다 모든 퍼즐을 limit 시간 안에 풀 수 있는 최소 level을…
동영상 재생기
"prev"는 재생 위치를 10초 전으로, "next"는 10초 후로 이동시키는 명령 10초 미만에서 prev를 하면 처음(0분 0초)으로, 남은 시간이 10초 미만에서 next를 하면 끝(video_len)으로 이동 현재 위치가 오프닝 구간(op_start ≤ 위치 ≤…
수레 움직이기
n x m 격자에 빨간 수레와 파란 수레가 각자의 도착 칸까지 이동해야 함 매 턴마다 두 수레를 모두 상하좌우로 한 칸씩 움직여야 하고, 벽·자신이 방문했던 칸으로는 이동 불가 도착한 수레는 그 칸에 고정, 두 수레가 같은 칸으로 이동하거나 자리를 맞바꾸는 것도 불가 격자…
카펫
중앙은 노란색, 테두리 1줄은 갈색인 격자 카펫에서 갈색 칸 수 brown, 노란색 칸 수 yellow가 주어짐 카펫의 가로, 세로 크기를 순서대로 배열에 담아 반환 가로 길이는 세로 길이와 같거나 더 김 brown은 8 이상 5,000 이하, yellow는 1 이상…
소수 찾기
한 자리 숫자가 적힌 종이 조각들을 이어 붙여 만들 수 있는 수 중 소수의 개수를 구하는 문제 문자열 numbers의 길이는 1 이상 7 이하 종이 조각을 일부만 사용해도 되고, 순서를 바꿔서 붙여도 됨 "011"과 11처럼 앞에 0이 붙어 같은 값이 되는 경우는 하나로 취급
붕대 감기
bandage는 [시전 시간 t, 초당 회복량 x, 추가 회복량 y]로 이루어진 배열 t초 연속으로 붕대를 감는 데 성공하면 y만큼 체력을 추가로 회복 몬스터의 공격을 받으면 연속 성공이 초기화되고, 공격당하는 순간에는 회복할 수 없음 체력은 최대 체력을 넘을 수 없고, 0…
베스트앨범
장르별로 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시 많이 재생된 장르부터, 장르 내에서는 재생 횟수가 많은 노래부터 수록 재생 횟수가 같으면 고유 번호가 낮은 노래를 먼저 수록 genres, plays의 길이는 1 이상 10,000 이하, 장르 종류는 100개 미만
석유 시추
1은 석유가 있는 칸, 0은 빈 땅 상하좌우로 연결된 1들은 하나의 석유 덩어리 시추관은 한 열 전체를 수직으로 관통 어떤 열이 석유 덩어리의 일부라도 지나면, 그 덩어리 전체를 획득 한 열에서 얻을 수 있는 석유량의 최댓값을 구하는 문제 처음 보면 각 열마다 시추관을 하나씩…
가사 검색
?가 포함된 검색 문자열이 단어 목록 중 몇 개와 일치하는지 구하는 문제 ?는 알파벳 한 글자를 의미하며 앞 또는 뒤에만 연속으로 등장 예) "fro??" → "fro"로 시작하고 길이가 5인 단어 이 문제를 처음 봤을 때 제일 먼저 떠오른 건 정규식이었다.
지형 편집
게임 지형은 각 칸마다 정수 높이를 가지고 있음 목표 : 모든 칸의 높이를 동일하게 만들기 블록 1개를 쌓는 비용 = P 블록 1개를 제거하는 비용 = Q 최종적으로 모든 칸의 높이가 같아지도록 할 때 필요한 최소 비용을 구하는 문제 처음 보자마자 모든 칸의 높이를 하나씩…
기둥과 보 설치
2차원 격자 위에 기둥(0), 보(1) 를 설치/삭제한다. 설치 및 삭제는 아래 조건을 항상 만족해야만 수행된다. 기둥 설치 가능 조건 보 설치 가능 조건 즉, 설치/삭제 이후 전체 구조물이 항상 조건을 만족해야 함.
등산코스 정하기
산의 지점들 중 출입구 → 산봉우리 → 출입구로만 이동해야 함. 경로에서 지나는 등산로 시간 중 가장 큰 값 = intensity. 모든 산봉우리 중, intensity가 가장 작은 산봉우리를 찾는다.(동률이면 번호가 작은 것) 이 문제는 얼핏 보면 “출입구에서 각…
행렬과 연산
주어진 행렬 rc에 대해 두 가지 연산을 수행해야 한다. 여러 번의 연산을 순서대로 수행한 후의 행렬을 반환해야 한다. 시간 효율을 고려해야 함 — 단순 배열 기반으로 회전시키면 시간초과 발생 이 문제는 처음보자마자 배열로 행렬을 만들어서 하면 절대 안될거라고 생각했다.
무지의 먹방 라이브
food_times[i]는 각 음식을 먹는 데 걸리는 시간 한 번에 1초씩 먹으며, 1초가 지나면 다음 음식으로 넘어감 k초가 지나면 네트워크가 끊기는데, 그때 먹고 있던 음식 번호를 구해야 한다.
리틀 프렌즈 사천성
보드는 m × n 크기의 문자 격자. 각 알파벳 대문자는 정확히 2개 존재(쌍). 두 같은 알파벳은 직선으로 연결되거나 한 번만 꺾어서(L자) 연결될 수 있어야 제거 가능. 경로는 .(빈칸)은 통과 가능, *(장애물)이나 다른 알파벳은 통과 불가.
광고 삽입
play_time: 동영상 총 재생시간 (HH:MM:SS) adv_time: 광고 재생시간 (HH:MM:SS) logs: 시청자별 재생 구간 [시작-끝] 이 최대 30만 개 목표: 시청자 누적 재생시간 합이 최대가 되는 광고 시작 시각을 반환 (여러 곳이면 가장 빠른 시각)…
자물쇠와 열쇠
key는 M×M 크기의 2차원 배열 lock은 N×N 크기의 2차원 배열 열쇠를 회전 및 이동시켜 자물쇠의 홈을 돌기로 정확히 채우고, 돌기끼리 겹치지 않도록 해야 한다. 자물쇠의 모든 홈이 채워지면 true, 아니면 false를 반환한다.
모두 0으로 만들기
각 노드에 가중치가 있고, 간선으로 연결된 트리가 주어진다. 한 번의 연산으로 두 노드 간의 값을 주고받을 수 있다. 모든 노드의 가중치를 0으로 만드는 데 필요한 최소 연산 횟수를 구하는 문제.
디스크 컨트롤러
하드디스크는 한 번에 하나의 작업만 수행할 수 있다. 디스크 컨트롤러는 다음과 같은 우선순위로 작업을 처리한다: 모든 작업의 평균 반환 시간(요청~완료까지의 시간) 의 정수 부분을 구하라. 이 문제는 보자마자 우선순위 큐를 써야겠다는 생각이 들었다.
파괴되지 않은 건물
N x M 크기의 보드(board) 가 있으며, 각 칸에는 건물의 내구도(정수) 가 있음 적과 아군이 번갈아가며 직사각형 영역에 스킬(skill)을 사용함 모든 스킬이 적용된 후, 파괴되지 않은 건물)의 개수를 구해야 함 이 문제는 보고 2차원 누적합을 사용해야 하나?
부대복귀
지도에는 1부터 n까지 번호가 붙은 지역이 존재하며, 각 지역은 양방향 도로(roads) 로 연결되어 있음 각 도로는 통과하는 데 걸리는 시간이 모두 1로 동일함 강철부대 본부가 위치한 지역 번호는 destination 여러 명의 부대원이 각각 다른 지역(sources)에서…
표 편집
0 ~ n-1 행으로 이루어진 표가 있고, 처음 선택된 행은 k 명령어 목록 cmd가 주어지며 한 번에 한 행만 선택됨, 표 범위를 벗어나는 이동은 주어지지 않음 지원 명령: 모든 명령 수행 후, 처음 표(0 ~ n-1) 기준으로 삭제되지 않은 행은 O, 삭제된 행은 X 로…
2차원 동전 뒤집기
이 문제를 보면서 꽤 오랜시간 풀이 방향성을 고민해보았다. 그러다가 든 생각이 초기 상태와 목표 상태의 차이를 구해보는 것이다. 즉, 각 위치의 동전이 서로 다른 경우를 1, 같은 경우를 0으로 표시하여 뒤집어야 하는 위치를 구분하였다.
등대
1부터 n까지 번호가 매겨진 등대가 있고, 등대들을 잇는 뱃길이 n-1개 주어짐 (그래프는 트리) 일부 등대를 켜서 운영하려 함 모든 뱃길(간선)에 대해 해당 뱃길의 양 끝 등대 중 적어도 하나는 켜져 있어야 함 위 조건을 만족하도록 켜야 하는 등대의 최소 개수를 구하기 이…
연속 펄스 부분 수열의 합
정수 수열 sequence가 주어짐 연속된 일부 구간(부분 수열)을 선택하고 같은 길이의 펄스 수열을 각 원소에 곱함 펄스 수열은 두 가지 형태 중 하나 곱셈 결과로 만들어진 연속 펄스 부분 수열의 합 중 가장 큰 값을 구하기 처음 이 문제를 보고 부분 합을 구해야겠다는…
N으로 표현
숫자 N(1~9) 과 목표값 number(1~32,000) 가 주어짐 N과 사칙연산(+, -, ×, ÷) 및 괄호만을 사용하여 number를 만들어야 함 N을 이어붙인 수(예: 5, 55, 555 등) 도 사용할 수 있음 각 표현식에서 사용된 N의 개수를 계산하여 단,…
가장 긴 팰린드롬
문자열 s(길이 2,500 이하, 소문자만) 이 주어짐 앞뒤가 같은 부분 문자열(팰린드롬) 중 가장 길이가 긴 것의 길이를 구해야 함 즉, s의 부분문자열 중에서 좌우 대칭이 되는 가장 긴 구간의 길이를 찾는 문제 이 문제는 처음보고 푼 방식이 순차탐색이었다.
지형 이동
N x N 크기의 격자 지형이 주어짐. 각 칸은 높이를 나타내는 숫자를 가짐 상, 하, 좌, 우로 이동 가능하며, 인접 칸의 높이 차가 height 이하일 경우 사다리 없이 이동 가능 높이 차가 height를 초과하면 사다리를 설치해야 하며, 비용은 두 칸의 높이 차와 같음…
억억단을 외우자
억억단은 i × j로 구성된 곱셈표 (1억 × 1억 크기) 어떤 수 n의 등장 횟수 = n의 약수 쌍 개수 정수 e와 여러 개의 starts[]가 주어짐 각 start s에 대해 [s, e] 범위에서 가장 많이 등장한 수를 구함 등장 횟수가 같으면 더 작은 수 선택 이 문제는…
메뉴 리뉴얼
이 문제는 처음 보고 dp로 풀어야 하나? 라고 고민했었는데 아무리 생각해도 풀이법이 떠오르지 않았다. 그래서 조합을 생각했는데 조합으로 해도 경우의 수가 엄청나게 많아지지는 않는 것 같아서 조합으로 풀게 되었다.
당구 연습
처음에는 어떻게 풀어야지? 라는 생각이 계속 들었는데 문제를 읽다보니 입사각과 반사각이 같다는 걸 보고 그냥 대칭이동 시키면 되지 않을까? 라는 생각으로 접근했다. 예를 들어, 아래와 같은 상황이 있다면 여기서 흰공이 검은공을 맞출 수 있는 경우는 아래와 같이 4가지 경우이다.
완전범죄
문제를 읽고나서 바로 이건 조합으로 풀면 안되겠다 라고 생각했지만 생각나는 풀이 방법이 이거 밖에 없어서 일단 코드를 짰다. 당연하게도 시간초과가 나고 40점을 받았다. 뭔가 dp로 해야된다는건 알겠는데 풀이방법을 모르겠다. 그래서 결국 검색찬스를 썼다.
카카오 프렌즈 컬러링북
프로그래머스 카카오 프렌즈 컬러링북 JAVA 풀이 과정과 코드를 정리했습니다.
길 찾기 게임
프로그래머스AI 추천문제를 계속 풀던 중에 정답률이 꽤 낮아보여서 풀게되었는데 문제를 처음 읽었을 때 생각보다 어려운 문제구나 싶었다. 근데 문제를 자세히 읽어보니 그냥 노드 클래스를 만들어서 트리를 만들어주면 되는 간단한 문제였다.
미로 탈출 명령어
처음에는 bfs, dfs로 경로 탐색하면 되는거 아닌가? 라고 생각하고 단순하게 풀었다. 나는 dfs로 d → l → r → u 순으로 탐색하면서 k번의 이동으로 목적지 까지 가면 무조건 사전순으로 빠른 경로가 나온다는 생각으로 문제를 풀었다. 근데 그렇게 하면 당연하게?
인사고과
이 문제는 프로그래머스에서 레벨3 중에 좀 그나마 쉬워보여서 선택했다. 일단 재활훈련이 시급하기 때문에.. 처음에는 그냥 두 점수의 합을 기준으로 정렬을 해서 그냥 완호의 석차만 계산해주면 되는거 아닌가? 라는 생각으로 코드를 짰다.
거스름돈 계산하기 2
정답률 34% · 제출 112회 · 예상 소요 시간 60분 곰돌이는 코드트리 마트에서 현재 일 하고 있습니다. 코드트리 마트에는 현재 N 가지의 동전들을 가지고 있고, 각 동전은 Ai 개를 가지고 있습니다.
다단계 칫솔 판매
트리의 형태로 다단계 판매가 형성되어 있다. 각 판매원은 자신에게 발생하는 이익의 10%를 추천인에게 배분하고 나머지를 가진다. 각 판매원의 이익을 계산하라. 해당 문제는 2021 백엔드 개발자를 위한 코테 문제였다.