본문 바로가기

프로그래머스(Java)

(192)
[프로그래머스] [PCCE 기출문제] 10번 / 공원 코드 힌트:문제 이해:mats 배열은 정사각형의 돗자리로 현재 공원에 놓을 수 있는 가장 큰 돗자리의 크기를 구하는데 사용하는 배열입니다.park는 n x m 크기의 공원 맵으로, 매트가 놓일 수 있는 빈 공간은 "-1"로 표시되어 있습니다. 매트는 "-1"로 표시된 빈 공간에만 놓일 수 있습니다.목표는 "-1"로 표시된 빈 공간 중 가장 큰 매트가 들어갈 수 있는 위치를 찾는 것입니다.매트 놓기:각 빈 공간("-1")에서 매트가 들어갈 수 있는 가장 큰 크기를 찾는 것이 목표입니다.공원 맵을 순회하면서 빈 공간이 나오면 그 위치를 기준으로 mats 배열에 있는 매트 크기 중 들어갈 수 있는 최대 크기를 찾습니다.매트는 정사각형이므로 해당 위치에서 매트가 들어갈 수 있는지를 확인해야 합니다.매트 크기 확..
[프로그래머스] 스티커 모으기(2) 코드 힌트문제 분석:스티커들이 원형으로 연결되어 있어서, 첫 번째 스티커를 떼면 마지막 스티커는 뗄 수 없습니다. 반대로 첫 번째 스티커를 떼지 않으면 마지막 스티커까지 떼는 것이 가능합니다.따라서 첫 번째 스티커를 떼는 경우와 떼지 않는 경우로 나누어 동적 계획법(DP)을 사용해 최댓값을 구하는 문제입니다.두 가지 케이스로 나눔:첫 번째 스티커를 떼는 경우:첫 번째 스티커를 떼었으므로 마지막 스티커는 뗄 수 없습니다.즉, 마지막 전 스티커까지 고려하여 최댓값을 구합니다.첫 번째 스티커를 떼지 않는 경우:첫 번째 스티커를 떼지 않았으므로 마지막 스티커까지 포함하여 최댓값을 구할 수 있습니다.동적 계획법(DP) 기본 아이디어:DP 배열은 각 스티커를 선택할 때 얻을 수 있는 최댓값을 저장하는 배열입니다.D..
[프로그래머스] 연속된 부분 수열의 합 힌트목표 합을 찾기:주어진 배열에서 연속된 부분 배열의 합이 k가 되는 구간을 찾아야 합니다.시작점과 끝점 두 개의 포인터를 사용하여 배열을 탐색하며, 포인터 사이의 값들의 합이 k와 같은지 확인합니다.이동 방식:초기에는 배열의 시작에서 끝까지 포인터를 이동하면서 합계를 계산합니다.만약 현재 합이 k보다 크다면 시작 포인터를 앞으로 이동시켜 구간을 줄입니다.합이 정확히 k가 되면 해당 구간을 기록하고, 더 짧은 구간이 있을 경우 그것으로 업데이트합니다.최적화 방법:각 구간에서의 합을 실시간으로 유지하며, 불필요한 연산을 줄이기 위해 더 짧은 구간이 발견될 때만 결과를 업데이트합니다.탐색이 끝날 때까지 가장 짧은 구간을 찾아냅니다. 정답은 더보기 클릭더보기class Solution { public i..
[프로그래머스] 큰 수 만들기 코드 힌트큰 수 만들기:주어진 숫자에서 일부 자릿수를 제거해 가능한 가장 큰 숫자를 만들어야 합니다.제거할 자릿수는 이미 고정되어 있기 때문에, 각 자릿수에서 최선의 선택을 해야 합니다.탐색 방법:각 자리에서 남은 숫자들 중에서 가장 큰 숫자를 선택합니다.선택한 숫자의 다음 위치부터 다시 탐색을 시작하여, 그 뒤에서 또 가장 큰 숫자를 찾습니다.범위 관리:현재 자리를 결정할 때, 앞으로 선택할 자리를 고려하여 탐색 범위를 설정합니다.한 번 선택된 숫자는 다시 선택하지 않도록 다음 선택할 범위를 줄여 나가야 합니다.최적화 아이디어:이미 선택된 숫자보다 더 작은 숫자는 무시하고, 그 다음 탐색부터 빠르게 넘어가면서 최종 큰 수를 만들어냅니다. 정답은 더보기 클릭더보기class Solution { pub..
[프로그래머스] 삼각 달팽이 코드 힌트:배열의 크기와 최대 값 계산:주어진 n에 대해 삼각형 배열을 채울 수 있는 최대 숫자를 계산한 후, 이 값을 기반으로 배열을 설정합니다.순차적으로 값 채우기:삼각형 형태로 숫자를 순차적으로 채우는 방식은 방향을 반복하며 이루어집니다.첫 번째 방향은 아래로, 두 번째는 오른쪽으로, 세 번째는 대각선 위로 이동합니다.배열에 값을 채우고 결과 반환:2차원 배열에서 값을 채운 후, 이를 1차원 배열로 변환하여 반환합니다. 정답은 더보기 클릭더보기class Solution { public int[] solution(int n) { int max = n * (n + 1) / 2; // 삼각형에 들어갈 최대 숫자 계산 int[][] map = new int[n][n]; /..
[프로그래머스] 쿼드압축 후 개수 세기 코드 힌트문제의 핵심:2차원 배열에서 동일한 값들로 이루어진 구역을 찾아 이를 압축하는 방식입니다.압축이 가능하면 해당 구역의 숫자(0 또는 1)의 개수를 기록하고, 압축이 불가능하면 구역을 4등분하여 재귀적으로 탐색합니다.압축 조건:주어진 size 크기의 구역이 모두 동일한 값(0 또는 1)으로 이루어져 있는지 확인합니다.만약 동일하다면 해당 값을 카운트합니다.재귀적인 분할:압축이 불가능한 경우, 해당 구역을 4등분하여 각 작은 구역에 대해 다시 압축을 시도합니다.이를 통해 점점 작은 영역으로 압축을 시도하게 됩니다.결과 배열:배열 result[0]은 0의 개수를, result[1]은 1의 개수를 저장합니다. 정답은 더보기 클릭더보기class Solution { int[] result = ..
[프로그래머스] 두 큐 합 같게 만들기 코드 힌트큐의 합을 맞추기:두 큐의 합을 비교해, 두 큐의 합이 같아지도록 큐 간의 원소를 옮깁니다.각 큐의 합을 추적하면서 목표 합과 비교합니다.목표 합 설정:두 큐의 모든 원소의 합을 계산하고, 이를 절반으로 나눈 값이 목표 합이 됩니다.최대 반복 횟수:두 큐의 원소들을 이동하면서 큐 간의 합을 맞춥니다.두 큐의 원소 개수보다 한 번 더 이동할 수 있도록 반복 횟수를 제한합니다.큐 간 이동:첫 번째 큐의 합이 목표보다 작으면, 두 번째 큐에서 원소를 하나 빼서 첫 번째 큐에 추가합니다.반대로 첫 번째 큐의 합이 목표보다 크면, 첫 번째 큐에서 원소를 빼서 두 번째 큐에 추가합니다. 정답은 더보기 클릭더보기import java.util.*;class Solution { public int solu..
[프로그래머스] 기지국 설치 코드 힌트문제 핵심:기지국은 특정 범위를 커버하며, 기지국이 커버하지 않는 빈 구역에 추가 기지국을 설치해야 합니다.새로운 기지국을 설치할 때는, 각 기지국이 커버할 수 있는 범위를 최대한 활용하여 최소 개수로 설치해야 합니다.기지국 범위 계산:기지국이 커버할 수 있는 범위는 좌우로 w만큼이고, 따라서 한 기지국이 커버하는 전체 범위는 2 * w + 1입니다.구역 처리 순서:각 기지국이 커버하지 않는 구역을 찾아 추가 기지국을 배치합니다.각 기지국이 커버하는 구역은 계산하여 확인된 위치를 그 구역의 오른쪽 끝으로 이동합니다.마지막 구역 처리:모든 기지국이 커버한 이후에도 남은 구역이 있을 경우, 그 구역에 추가 기지국을 설치합니다. 정답은 더보기 클릭더보기class Solution { public ..