문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/138476
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
▼ ▼ ▼
▲ ▲ ▲
내 풀이 (오답)
로직
- 귤의 크기를 Key, 개수를 Value로 갖는 Map 객체를 생성한다.
- 이를 Value를 기준으로 내림차순 정렬한다.
- key의 값을 차례로 가져와 k에서 빼준다.
- 이 때, k에서 value를 뺐을 때 k가 0 미만이 되는 경우에는 다음 key로 넘어간다.
- 종류의 수에 해당하는 return값 answer을
++
해준다. - k가 0이 되면 반복문을 빠져나온다.
코드
import java.util.*;
class Solution {
public int solution(int k, int[] tangerine) {
int answer = 0;
Map<Integer, Integer> size = new HashMap<>();
for(int a : tangerine) {
size.put(a, size.getOrDefault(a,0)+1);
}
List<Integer> list = new ArrayList<>(size.keySet());
Collections.sort(list, (v1, v2) -> (size.get(v2).compareTo(size.get(v1))));
for(int a : list) {
if(k==0) {
break;
}
if(k-size.get(a)<0) {
continue;
} else if (k-size.get(a)>=0) {
k -= size.get(a);
answer++;
}
}
return answer;
}
}
채점 결과
정확성 테스트
테스트 1 〉 실패 (45.24ms, 80.2MB)
테스트 2 〉 실패 (30.93ms, 98MB)
테스트 3 〉 실패 (28.84ms, 82.2MB)
테스트 4 〉 실패 (26.67ms, 97.8MB)
테스트 5 〉 통과 (32.21ms, 79.9MB)
테스트 6 〉 통과 (27.66ms, 90.1MB)
테스트 7 〉 통과 (27.79ms, 93.4MB)
테스트 8 〉 실패 (36.91ms, 103MB)
테스트 9 〉 실패 (30.01ms, 83.2MB)
테스트 10 〉 통과 (30.03ms, 92.3MB)
테스트 11 〉 통과 (1.90ms, 76.1MB)
테스트 12 〉 통과 (0.72ms, 73.8MB)
테스트 13 〉 통과 (1.01ms, 74.1MB)
테스트 14 〉 통과 (0.87ms, 81.3MB)
테스트 15 〉 통과 (0.92ms, 74.1MB)
테스트 16 〉 실패 (0.81ms, 78.7MB)
테스트 17 〉 통과 (1.18ms, 76.8MB)
테스트 18 〉 통과 (0.94ms, 78.5MB)
테스트 19 〉 실패 (0.85ms, 75.3MB)
테스트 20 〉 통과 (0.73ms, 77MB)
테스트 21 〉 통과 (2.23ms, 74.7MB)
테스트 22 〉 통과 (3.05ms, 74.4MB)
테스트 23 〉 통과 (2.61ms, 80.4MB)
테스트 24 〉 통과 (2.49ms, 79.1MB)
테스트 25 〉 통과 (15.77ms, 84.6MB)
테스트 26 〉 통과 (21.97ms, 78.8MB)
테스트 27 〉 통과 (109.65ms, 104MB)
테스트 28 〉 통과 (71.20ms, 95.1MB)
테스트 29 〉 통과 (100.00ms, 112MB)
테스트 30 〉 통과 (91.10ms, 105MB)
테스트 31 〉 실패 (22.41ms, 95.6MB)
테스트 32 〉 통과 (28.82ms, 87.1MB)
테스트 33 〉 통과 (86.53ms, 105MB)
테스트 34 〉 통과 (70.70ms, 112MB)
채점 결과
정확성: 73.5
합계: 73.5 / 100.0
내 풀이 (정답)
로직
- key의 값을 차례로 가져와 k에서 빼준다.
- 이 때, k에서 value를 뺐을 때 k가 0 미만이 되는 경우에는 다음 key로 넘어간다.
이 부분에서, k가 0 미만이 되는 경우에 다음 key로 넘어갈 필요가 없다!
그 크기의 귤 전체 개수에 딱 맞춰서 팔아야하는 것으로 문제를 잘못 해석했다.
해당 크기의 귤 개수 모두를 소모하지 못하더라도 괜찮음.
확장 for문 안의 해당부분 코드를 수정해주었다.
코드
//1차 PM 4:00 ~ 4:45
//2차 ~PM 4:55
import java.util.*;
class Solution {
public int solution(int k, int[] tangerine) {
int answer = 0;
Map<Integer, Integer> size = new HashMap<>();
for(int a : tangerine) {
size.put(a, size.getOrDefault(a,0)+1);
}
List<Integer> list = new ArrayList<>(size.keySet());
Collections.sort(list, (v1, v2) -> (size.get(v2).compareTo(size.get(v1))));
for(int a : list) {
if(k<=0) {
break;
}
k -= size.get(a);
answer++;
}
return answer;
}
}
채점 결과
정확성 테스트
테스트 1 〉 통과 (27.57ms, 96.9MB)
테스트 2 〉 통과 (22.92ms, 107MB)
테스트 3 〉 통과 (32.87ms, 97.7MB)
테스트 4 〉 통과 (24.74ms, 82.3MB)
테스트 5 〉 통과 (28.61ms, 84.6MB)
테스트 6 〉 통과 (18.70ms, 94MB)
테스트 7 〉 통과 (21.68ms, 95.1MB)
테스트 8 〉 통과 (22.97ms, 104MB)
테스트 9 〉 통과 (30.10ms, 79.6MB)
테스트 10 〉 통과 (27.84ms, 97.3MB)
테스트 11 〉 통과 (0.95ms, 76.6MB)
테스트 12 〉 통과 (0.93ms, 83MB)
테스트 13 〉 통과 (0.86ms, 75.5MB)
테스트 14 〉 통과 (0.72ms, 72.6MB)
테스트 15 〉 통과 (0.90ms, 73.3MB)
테스트 16 〉 통과 (0.66ms, 73.7MB)
테스트 17 〉 통과 (0.86ms, 76.6MB)
테스트 18 〉 통과 (0.71ms, 73.5MB)
테스트 19 〉 통과 (0.97ms, 79.5MB)
테스트 20 〉 통과 (0.88ms, 74.1MB)
테스트 21 〉 통과 (1.62ms, 80.9MB)
테스트 22 〉 통과 (3.44ms, 78.7MB)
테스트 23 〉 통과 (3.35ms, 79MB)
테스트 24 〉 통과 (2.13ms, 79.8MB)
테스트 25 〉 통과 (10.89ms, 83.3MB)
테스트 26 〉 통과 (22.21ms, 89.4MB)
테스트 27 〉 통과 (71.76ms, 107MB)
테스트 28 〉 통과 (44.13ms, 110MB)
테스트 29 〉 통과 (59.66ms, 106MB)
테스트 30 〉 통과 (56.84ms, 93.2MB)
테스트 31 〉 통과 (21.93ms, 86MB)
테스트 32 〉 통과 (35.40ms, 93.3MB)
테스트 33 〉 통과 (64.23ms, 109MB)
테스트 34 〉 통과 (82.08ms, 110MB)
채점 결과
정확성: 100.0
합계: 100.0 / 100.0
배운 점
- Map을 Value 기준으로 정렬하는 방법
'코딩테스트 - 프로그래머스 > JAVA' 카테고리의 다른 글
[프로그래머스 / 월간 코드 챌린지 시즌2 / 자바(JAVA)] 괄호 회전하기 (0) | 2024.04.08 |
---|---|
[프로그래머스 / 연습문제 / 자바(JAVA)] 연속 부분 수열 합의 개수 (0) | 2024.04.07 |
[프로그래머스 / 2017 팁스타운 / 자바(JAVA)] 예상 대진표 (0) | 2024.04.04 |
[프로그래머스 / 코딩테스트 연습 / 자바(JAVA)] 멀리 뛰기 (1) | 2024.04.03 |
[프로그래머스 / 탐욕법(Greedy) / 자바(JAVA)] 구명보트 (1) | 2024.03.18 |