본문 바로가기

프로그래머스(Java)/Level 2

(51)
[프로그래머스] 큰 수 만들기 코드 힌트큰 수 만들기:주어진 숫자에서 일부 자릿수를 제거해 가능한 가장 큰 숫자를 만들어야 합니다.제거할 자릿수는 이미 고정되어 있기 때문에, 각 자릿수에서 최선의 선택을 해야 합니다.탐색 방법:각 자리에서 남은 숫자들 중에서 가장 큰 숫자를 선택합니다.선택한 숫자의 다음 위치부터 다시 탐색을 시작하여, 그 뒤에서 또 가장 큰 숫자를 찾습니다.범위 관리:현재 자리를 결정할 때, 앞으로 선택할 자리를 고려하여 탐색 범위를 설정합니다.한 번 선택된 숫자는 다시 선택하지 않도록 다음 선택할 범위를 줄여 나가야 합니다.최적화 아이디어:이미 선택된 숫자보다 더 작은 숫자는 무시하고, 그 다음 탐색부터 빠르게 넘어가면서 최종 큰 수를 만들어냅니다. 정답은 더보기 클릭더보기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..
[프로그래머스] 소수 찾기 코드 힌트:숫자의 모든 순열 생성:주어진 문자열의 각 숫자들로 만들 수 있는 모든 가능한 숫자의 순열을 구합니다. 이때, 숫자의 자릿수를 다양하게 설정하여 1자리, 2자리, ... 최대 n자리까지 모든 경우의 수를 고려합니다.소수 판별:각 순열로 만들어진 숫자가 소수인지 판별하고, 소수일 경우에만 HashSet에 저장합니다.HashSet을 사용하는 이유는 중복된 소수를 배제하기 위해서입니다.순열과 소수 판별의 반복:순열 생성은 재귀적으로 처리하여, 아직 방문하지 않은 숫자를 추가하고, 방문 여부를 기록합니다.소수 여부를 확인할 때는 2부터 해당 숫자의 제곱근까지 나눠보는 방식으로 효율적으로 소수인지 확인합니다.  정답은 더보기 클릭더보기import java.util.*;class Solution { ..
[프로그래머스] 2 x n 타일링 코드 힌트:규칙 찾기:문제는 2xN 크기의 직사각형을 채우는 방법의 수를 구하는 것입니다.가로 길이가 2, 세로 길이가 1인 타일을 사용합니다. 이 타일로 주어진 공간을 채울 수 있는 방법의 수를 계산합니다.n = 4일 때:1111 => 1가지112 => 3가지 (112, 211, 121)22 => 1가지 (22)n = 5일 때:11111 => 1가지1112 => 4가지 (1112, 2111, 1211, 1121)122 => 3가지 (122, 212, 221)이러한 패턴을 보면, 각 n에 대한 타일링 방법의 수는 피보나치 수열과 동일하다는 것을 알 수 있습니다.저는 조금 더 확실하게 하기 위해 7까지 하고 풀어봤었습니다. 예시는 길어지니 5까지 하겠습니다.피보나치 알고리즘으로 풀기:이 문제는 피보나치 수..
[프로그래머스] [1차] 프렌즈4블록 코드 힌트:2x2 블록 찾기:맵을 탐색하면서 2x2 크기의 동일한 블록을 찾습니다.만약 발견되면, 해당 블록의 인덱스를 저장합니다.블록 제거:저장된 블록의 인덱스를 이용해 해당 블록들을 '0'으로 설정하여 제거합니다.이 과정에서 블록이 떨어지게 됩니다.블록 내리기:블록이 제거된 후, 위에 있는 블록들이 아래로 떨어지도록 맵을 업데이트합니다.반복:위 과정을 블록이 더 이상 제거되지 않을 때까지 반복합니다.게임이 끝나면 제거된 블록의 총 개수를 반환합니다.  정답은 더보기 클릭더보기import java.util.*;class Solution { // 2x2 블록을 찾아서 제거하고, 블록이 제거된 후 위에 있는 블록을 아래로 내리는 게임 로직 구현 public int solution(int m, i..
[프로그래머스] 숫자 변환하기 코드 힌트목표:주어진 숫자 x에서 시작해 목표 숫자 y에 도달하는 최소 연산 횟수를 구합니다.사용 가능한 연산은 n을 더하기, 2를 곱하기, 3을 곱하기입니다.BFS (너비 우선 탐색):BFS를 사용해 최단 경로를 찾습니다.BFS는 주어진 상태에서 가능한 모든 다음 상태를 큐에 추가하고, 하나씩 처리하면서 목표 상태에 도달하는지를 확인합니다.방문 체크:아마 대부분의 사람들이 시간초과의 이유로 찾으셨을거라고 생각합니다.이미 방문한 숫자는 최소 횟수가 아니므로 visit 배열을 사용하여 이미 방문한 숫자는 다시 방문하지 않도록 visited 배열을 사용합니다. 종료 조건:목표 숫자 y에 도달하면 그때까지의 연산 횟수를 반환합니다.큐가 비었음에도 목표에 도달하지 못했다면 -1을 반환해 불가능함을 나타냅니다. ..