본문 바로가기

Programmers24

[Java] 프로그래머스 - 추억 점수 이름별 그리움 점수를 Map에 저장한 뒤, 각 사진에 등장하는 사람들의 점수를 합산하는 문제 1. 문제 유형HashMap, 배열, 구현 2. 내가 놓친 포인트처음 떠올린 접근 : Map과 getOrDefault()를 사용하면 이름별 그리움 점수를 빠르게 조회할 수 있을 것 같다고 생각했다. 오답 원인: 없음. 3. 핵심 로직 & 해결 방법핵심 조건: 사진 속 인물이 name 배열에 존재하면 해당 그리움 점수를 더하고, 존재하지 않으면 0점을 더한다. 풀이 아이디어:name[i]와 yearning[i]를 이용해 이름별 점수를 Map에 저장한다.photo 배열을 순회하면서 각 사진에 등장하는 사람들의 이름을 확인한다.getOrDefault()를 사용해 점수가 있는 사람은 해당 점수를 더하고, 없는 사람은 0.. 2026. 5. 8.
[Java] 프로그래머스 - 피로도 최소 필요 피로도와 소모 피로도가 있는 여러 던전 중, 현재 피로도 k로 탐험할 수 있는 최대 던전 수를 구하는 문제 1. 문제 유형DFS, 백트래킹, 완전탐색 2. 내가 놓친 포인트처음 떠올린 접근 : 처음에는 index + 1, index - 1처럼 배열의 위치를 이동하면서 던전을 탐색하려고 했다.오답 원인: DFS를 다음 index로 이동하는 방식으로 생각했는데, 이 문제의 핵심은 index 이동이 아니라 방문 여부를 관리하면서 모든 순서를 탐색하는 것이었다. 3. 핵심 로직 & 해결 방법핵심 조건: 아직 방문하지 않은 던전이고, 현재 피로도가 해당 던전의 최소 필요 피로도 이상이면 탐험할 수 있다. 풀이 아이디어:DFS에 현재 피로도 k와 현재까지 탐험한 던전 수 count를 넘긴다.DFS에 들.. 2026. 5. 6.
[Java] 프로그래머스 - 더 맵게 모든 음식의 스코빌 지수가 K 이상이 될 때까지, 가장 맵지 않은 음식 2개를 섞는 최소 횟수를 구하는 문제 1. 문제 유형힙, 우선순위 큐, 구현 2. 내가 놓친 포인트처음 떠올린 접근 : 처음에는 Deque를 사용해서 앞에서 음식 2개를 꺼내고, 섞은 값을 다시 앞에 넣는 방식으로 풀었다. 오답 원인: Deque는 입력된 순서대로 값을 관리할 뿐, 최솟값을 자동으로 앞으로 보내주지 않는다. 3. 핵심 로직 & 해결 방법핵심 조건: 매 반복마다 현재 음식 중 가장 작은 값 2개를 꺼내야 한다. 풀이 아이디어:모든 스코빌 지수를 PriorityQueue에 넣는다.peek()로 현재 가장 작은 값이 K 이상인지 확인한다.K보다 작다면 poll()을 두 번 해서 가장 작은 음식 2개를 꺼낸다.first +.. 2026. 5. 4.
[Java] 프로그래머스 - 롤케이크 자르기 롤케이크를 한 지점에서 잘랐을 때, 왼쪽 조각과 오른쪽 조각이 가진 토핑의 종류 수가 같아지는 경우의 수를 구하는 문제 1. 문제 유형HashMap, HashSet 2. 내가 놓친 포인트처음 떠올린 접근 : 자를 수 있는 위치를 기준으로 왼쪽과 오른쪽을 나눈 뒤, 각각의 토핑 종류 수를 매번 새로 세려고 했다.오답 원인: topping의 길이가 최대 1,000,000이기 때문에 자르는 위치마다 배열을 다시 탐색하면 시간 초과가 발생할 수 있어서 자르는 위치를 한 칸씩 옮기면서 왼쪽과 오른쪽의 상태를 갱신해야한다. 3. 핵심 로직 & 해결 방법핵심 조건: 왼쪽 조각의 토핑 종류 수와 오른쪽 조각의 토핑 종류 수가 같으면 공평하게 나눈 경우다.풀이 아이디어:처음에는 모든 토핑이 오른쪽에 있다고 생각하고, H.. 2026. 4. 30.
[Java] 프로그래머스 - N-Queen n x n 체스판에서 서로 공격할 수 없도록 퀸 n개를 배치하는 경우의 수를 구하는 문제 1. 문제 유형백트래킹, DFS, 재귀 2. 내가 놓친 포인트처음 떠올린 접근 : 처음에는 int[][] map으로 체스판 전체를 만들고, 퀸을 놓을 수 있는지 매번 검사하려고 했다. 이 방식 자체가 틀린 것은 아니지만, 문제를 너무 체스판 전체 탐색으로 바라봐서 복잡하게 느껴졌다.특히 현재 위치에 퀸을 놓을 수 있는지 검사할 때 위쪽 행의 모든 칸을 다시 확인해야 해서 흐름이 잘 안 잡혔다.오답 원인: 처음에는 dfs()가 체스판 전체를 탐색하는 함수처럼 느껴졌는데, 한 번의 DFS 호출은 현재 행에 퀸을 어디에 둘지 선택하는 단계였다. 3. 핵심 로직 & 해결 방법핵심 조건: 퀸은 같은 열, 같은 대각선에 있으.. 2026. 4. 29.
[Java] 프로그래머스 - N개의 최소공배수 배열에 담긴 여러 숫자의 최소공배수를 구하는 문제. 1. 문제 유형수학, 구현 2. 내가 놓친 포인트처음 떠올린 접근 : 배열의 0번 인덱스와 1번 인덱스의 최소공배수를 구한 뒤 그 결과를 `currentNum`에 저장하고 다음 숫자와 다시 최소공배수를 구하려고 했다. 오답 원인: 두 수의 최소공배수를 찾는 내부 반복 조건이 잘못되었다. 3. 핵심 로직 & 해결 방법핵심 조건: 두 수 a, b의 최소공배수는 a의 배수 중에서 b로 나누어떨어지는 가장 작은 수다. 풀이 아이디어:currentNum에 배열의 첫 번째 값을 저장한다.다음 숫자 nextNum을 하나씩 꺼낸다.currentNum의 배수를 증가시키며 nextNum으로 나누어떨어지는 값을 찾는다.찾은 값을 다시 currentNum에 저장한다.배열 .. 2026. 4. 28.