본문 바로가기

프로그래머스(Java)

(192)
[프로그래머스] 이중우선순위큐 코드 힌트값을 담을 자료구조 선택하기:이중 우선순위 큐는 최댓값과 최솟값을 효율적으로 삽입 및 삭제할 수 있는 자료구조를 사용해야 합니다.PriorityQueue는 힙(Heap) 구조를 사용하여 요소를 정렬하고, 최소값을 빠르게 찾을 수 있습니다.최댓값을 빠르게 찾기 위해 Collections.reverseOrder()를 사용하여 내림차순 정렬된 PriorityQueue를 추가로 사용합니다.다른 자료 구조도 사용이 가능합니다명령어 처리:명령어가 I (삽입) 인 경우, 주어진 값을 두 개의 PriorityQueue에 추가합니다.명령어가 D (삭제) 인 경우, 다음을 처리합니다:D 1: 최댓값을 삭제합니다.D -1: 최솟값을 삭제합니다.PriorityQueue에서 요소를 제거할 때, 각 큐에서 해당 요소를 ..
[프로그래머스] 문자열 뒤집기 코드 힌트:substring() 메서드 사용하기String을 for문으로 돌면서 해도 좋지만, 쉽게 문자를 자르는 방법인 substring() 메서드를 사용하면 더 간편합니다.s~e번째까지 문자를 뒤집습니다StringBuilder의 reverse() 메서드를 사용하거나 for문을 사용하여 문자열을 뒤집을 수 있습니다. 정답은 더보기 클릭더보기1. String, substring()을 사용하기class Solution { public String solution(String my_string, int s, int e) { String result = ""; // 결과 문자열에 시작 인덱스 s 이전의 문자열을 추가 result += my_string...
[프로그래머스] 더 맵게 코드 힌트PriorityQueue 사용하기우선순위 큐는 각 요소가 우선순위에 따라 정렬되어 큐에 저장됩니다. 이 문제에서 PriorityQueue를 사용하면 가장 작은 스코빌 지수를 효율적으로 가져올 수 있습니다. 일반 큐나 리스트를 사용할 경우, 효율성 테스트에서 시간 초과가 발생할 수 있습니다.PriorityQueue는 들어온 순서와 상관없이 우선순위가 높은 데이터가 먼저 나가는 구조입니다. 여기서 우선순위는 낮은 숫자일수록 높은 우선순위를 가집니다.섞은 음식들과 섞지 않은 음식들 모두 스코빌 지수(K)보다 높아야 합니다두 개의 가장 작은 스코빌 지수를 꺼내어 새로운 스코빌 지수를 만들어 우선순위 큐에 다시 추가합니다.이 과정을 반복하여 모든 음식이 K 이상의 스코빌 지수를 갖도록 만듭니다.만약 조건..
[프로그래머스] 자릿수 더하기 코드 힌트정답을 풀 수 있는 2가지 방법문자열로 변환하여 한 자리씩 더하는 방법:숫자를 문자열로 변환하세요.변환한 문자열의 각 문자를 하나씩 순회하면서 숫자로 바꾸고, 이를 모두 더하세요.10으로 나머지를 구하는 방식:주어진 숫자를 10으로 나눈 나머지를 구하세요. 이는 숫자의 마지막 자릿수를 구하는 방법입니다.이 나머지를 결과에 더한 후, 숫자를 10으로 나누어 다음 자릿수를 처리하세요.이 과정을 숫자가 0이 될 때까지 반복하세요. 더보기1. 문자열로 변환하여 구하는 방법public class Solution { public int solution(int n) { int result = 0; // 숫자를 문자열로 변환 String str = St..
[프로그래머스] 문자열 내 p와 y의 개수 코드 힌트문자열 변환: 먼저 문자열 s를 모두 소문자로 변환하여 'P'와 'p', 'Y'와 'y'를 동일하게 처리할 수 있습니다.반복문: for 반복문을 사용하여 문자열의 각 문자를 하나씩 검사합니다.조건문: if-else 조건문을 사용하여 문자가 'p'인 경우 count를 증가시키고, 'y'인 경우 count를 감소시킵니다.결과 반환: 마지막으로 count가 0인지 확인하여 'p'와 'y'의 개수가 동일한지 여부를 반환합니다.  정답은 더보기 클릭 더보기class Solution { boolean solution(String s) { // 'p'와 'y'의 개수를 세기 위한 변수 int count = 0; // 문자열을 모두 소문자로 변환 ..
[프로그래머스] 배열 회전시키기 문제 풀이 힌트결과를 저장할 배열 생성:result 배열을 입력 배열 numbers와 동일한 크기로 초기화합니다.방향이 "right"인 경우:입력 배열의 마지막 원소를 result 배열의 첫 번째 위치에 저장합니다.나머지 원소들을 오른쪽으로 한 칸씩 이동합니다.예를 들어, numbers[0]는 result[1]에 저장됩니다.방향이 "left"인 경우:입력 배열의 첫 번째 원소를 result 배열의 마지막 위치에 저장합니다.나머지 원소들을 왼쪽으로 한 칸씩 이동합니다.예를 들어, numbers[1]는 result[0]에 저장됩니다.다른 방법으로 "deque"를 사용 더보기배열을 이용한 풀이class Solution { public int[] solution(int[] numbers, String di..
[프로그래머스] 귤 고르기 문제 풀이 힌트결과를 저장할 변수 (result) 초기화:몇 가지 종류의 귤을 사용했는지 저장하는 변수입니다.HashMap을 사용하여 귤의 크기별 개수를 세기 (map):map은 귤의 크기(size)를 키로 하고, 해당 크기의 귤 개수(count)를 값으로 저장합니다.getOrDefault(size, 0)는 size가 map에 없을 경우 0을 반환하여, 처음 등장하는 귤 크기는 개수를 1로 시작합니다.귤의 크기 리스트 생성 (keySet) 및 내림차순 정렬:keySet은 map의 키를 리스트로 변환한 것입니다.sort 메서드를 사용하여 귤의 개수를 기준으로 내림차순 정렬합니다.많은 개수의 귤 크기부터 순서대로 k에서 빼기:for 루프를 사용하여 keySet을 순회하며, 각 크기의 귤 개수를 k에서 뺍니다..
[프로그래머스] 369게임 문제 풀이 힌트숫자를 문자열로 변환:주어진 숫자를 문자열로 변환하여 각 자릿수를 쉽게 탐색할 수 있습니다.String.valueOf(order)를 사용하여 숫자를 문자열로 변환합니다.각 자릿수 탐색:문자열로 변환된 숫자를 toCharArray()를 사용하여 문자 배열로 변환합니다.for (char c : String.valueOf(order).toCharArray())를 사용하여 각 자릿수를 탐색합니다.혹은 for (int i = 0; i 조건 검사:각 자릿수가 '3', '6', '9'인지 확인합니다.if (c == '3' || c == '6' || c == '9') 조건문을 사용합니다.카운트 증가:조건에 맞는 경우 결과 카운트를 증가시킵니다.result++를 사용하여 카운트를 증가시킵니다.정답은 더보기..