본문 바로가기

728x90

프로그래머스(Java)

(192)
[프로그래머스] [PCCE 기출문제] 9번 / 지폐 접기 코드 힌트문제의 핵심:지갑에 들어갈 수 없는 지폐를 지갑에 넣기 위해, 지폐의 큰 쪽을 반으로 접는 문제입니다.지폐의 크기를 조정할 때마다 카운트를 증가시켜, 최종적으로 지폐가 지갑에 들어갈 수 있게 만들 때까지 접는 횟수를 구합니다.지갑과 지폐 크기 비교:wallet과 bill 배열을 비교하여 지갑이 지폐를 담을 수 있는지 확인합니다. 지갑과 지폐의 최소 크기와 최대 크기를 비교합니다.지폐 접기 과정:bill 배열에서 큰 값을 반으로 접어 크기를 줄입니다. 이 과정은 지갑에 들어갈 수 있을 때까지 반복됩니다.최대/최소 크기 계산:지갑과 지폐 각각의 최대값과 최소값을 구해, 지갑과 지폐의 크기를 비교합니다.  정답은 더보기 클릭더보기더보기class Solution { public int soluti..
[프로그래머스] [PCCP 기출문제] 1번 / 동영상 재생기 코드 힌트:동영상 시간 처리:동영상의 전체 길이와 현재 재생 위치, 오프닝 구간 시작/종료 시간을 모두 분 단위로 변환하여 처리합니다.명령어 처리:next 명령어는 10초 앞으로 이동, 그 외 명령어는 10초 뒤로 이동하게 구현합니다.오프닝 구간 스킵:오프닝 구간에 도달하면 해당 구간을 넘어서 이동합니다.시간 설정 및 포맷 변환:현재 시간이 동영상의 길이를 벗어나지 않도록 제한하고, 시/분 형식으로 변환해 출력합니다. 정답은 더보기 클릭더보기class Solution { public String solution(String video_len, String pos, String op_start, String op_end, String[] commands) { // Video 객체 생성 (..
[프로그래머스] 소수 찾기 코드 힌트:숫자의 모든 순열 생성:주어진 문자열의 각 숫자들로 만들 수 있는 모든 가능한 숫자의 순열을 구합니다. 이때, 숫자의 자릿수를 다양하게 설정하여 1자리, 2자리, ... 최대 n자리까지 모든 경우의 수를 고려합니다.소수 판별:각 순열로 만들어진 숫자가 소수인지 판별하고, 소수일 경우에만 HashSet에 저장합니다.HashSet을 사용하는 이유는 중복된 소수를 배제하기 위해서입니다.순열과 소수 판별의 반복:순열 생성은 재귀적으로 처리하여, 아직 방문하지 않은 숫자를 추가하고, 방문 여부를 기록합니다.소수 여부를 확인할 때는 2부터 해당 숫자의 제곱근까지 나눠보는 방식으로 효율적으로 소수인지 확인합니다.  정답은 더보기 클릭더보기import java.util.*;class Solution { ..
[프로그래머스] 단속카메라 코드 힌트:카메라 설치 기준:차량이 고속도로를 나가는 시점에 카메라를 설치하는 것이 가장 효율적입니다.카메라를 설치한 이후에도 다른 차량이 해당 카메라에 걸리는지 확인합니다.차량의 경로가 카메라의 범위를 벗어나는 경우 새로운 카메라를 설치합니다.정렬:차량이 고속도로에서 나가는 시점에 맞춰 오름차순으로 정렬합니다.정렬된 상태에서 경로를 순차적으로 확인해 카메라 설치 여부를 결정합니다.로직 흐름:차량이 나가는 시점을 기준으로 정렬한 후, 가장 먼저 나가는 차량에 카메라를 설치합니다.그 이후 차량들의 경로가 카메라 범위 안에 포함되는지 확인한 후, 포함되지 않으면 새로운 카메라를 설치합니다.  정답은 더보기 클릭더보기import java.util.*;class Solution { public int so..
[프로그래머스] 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..
[프로그래머스] 최고의 집합 코드 힌트:불가능한 경우 처리:만약 n이 s보다 크다면, n개의 숫자로 s를 나누는 것이 불가능하기 때문에 결과 배열로 {-1}을 반환합니다.평균 분배:s를 n으로 나눈 몫을 모든 배열 요소에 기본 값으로 설정합니다.이렇게 하면 각 요소가 가능한 한 균등하게 값을 가지게 됩니다.나머지 분배:s가 n으로 정확히 나누어 떨어지지 않는 경우, 나머지를 배열의 뒤에서부터 하나씩 분배합니다.이렇게 하면 배열이 내림차순으로 정렬된 상태를 유지할 수 있습니다.  정답은 더보기 클릭더보기import java.util.*;class Solution { public int[] solution(int n, int s) { int[] result = new int[n]; // 길이가 n인 결과 배열 생성 ..
[프로그래머스] 숫자 게임 코드 힌트:정렬 후 비교:두 배열 A와 B를 오름차순으로 정렬한 후, 각 요소를 비교합니다.이렇게 하면 최소한의 연산으로 이길 수 있는 경우를 최대화할 수 있습니다.두 포인터 방식:이 코드는 두 포인터 방식(two-pointer technique)을 사용합니다.두 배열을 동시에 순회하면서 비교하여 A의 카드를 사용하여 B의 카드를 이길 수 있는지를 판단합니다.이 방식은 시간 복잡도를 줄이는 데 효과적입니다.반복문 구조:while 반복문은 B 배열의 끝에 도달할 때까지 진행되며, A 배열의 현재 카드가 B 배열의 현재 카드보다 작은 경우에만 result를 증가시킵니다.이로써 A의 카드가 B의 카드보다 많은 경우에도 처리할 수 있습니다. 정답은 더보기 클릭더보기import java.util.*;class S..

728x90