매일 매일 하루 한 문제씩.
꾸준히 이어가는 코딩테스트 풀이 기록 ✅
코딩테스트를 연속적으로 풀어내지 못하니 너무 자신감이 떨어져서 level 2에서 정답률이 그나마 좀 높은 문제를 선택했는데. 그것 역시 버거워서 황당ㅎㅎ
자신감은 커녕 나락으로 떨어지는 마음을 꽉 잡고 다른 풀이를 참고해 푼 귤 고르기 문제를 기록한다.
자바로는 너무 오랜만에 풀어서 내가 뭘 하고 있는건가 싶을만큼 낯설었다.
코테로라도 자바를 계속 연습해야 하는데 요며칠 자바스크립트만으로도 시간이 너무 많이 소요돼서 자바는 손도 못댄 것이 사실.
어쨌든 map이나 list도 오랜만에 사용했고 특히 sort에서 내림차순 정렬은 사용할 때마다 다시 상기되는 것 같다.
풀면서 '시간초과가 되지 않을까?' 싶은 생각이 들었는데 어쨌든 케이스 모두 통과.
오늘 새롭게 알게된 부분은 map의 getOrDefault()
메서드이다.
마치 javascript의 ||
와 같은 것이었는데 map에서 해당 key를 포함하고 있으면 그 value 값을, 만약 없다면 설정해둔 default 값을 활용하는 것이었다.
원래 이런 메서드가 있었나..? 정말 새롭게 안 부분이다. 자바스크립트 사용하는 느낌이여...ㅎ.ㅎ.
import java.util.*;
class Solution {
public int solution(int k, int[] tangerine) {
int answer = 0;
Map<Integer, Integer> map = new HashMap<>();
for (int item : tangerine) {
map.put(item, map.getOrDefault(item, 0) + 1);
}
List<Integer> lists = new ArrayList<>(map.values());
lists.sort(Collections.reverseOrder());
int count = 0;
for (Integer x : lists) {
answer += 1;
count += x;
if (count >= k) {
break;
}
}
return answer;
}
}
가장 최근에 봤던 면접에서 코테를 탈탈 털리고 '효율성'에 대한 이야기를 들으니 뭐랄까. 살짝 트라우마 같은게 생긴 것 같다.
효율성이 고민스러워서 거의 손도 못대고 있고, 용기를 내서 풀어봐도 답이 틀리거나 특히 효율성에서 뻑나면 진짜 멘붕이 오는듯.
오늘 푼 첫번째 풀이도 사실 답도 틀렸지만 시간초과 코드가 파바박 뜨니 아무것도 하기 싫어지는 마음이 들었다.
그래도 어쩌겠냐. 하하.
다른 사람들의 풀이를 보면서 'dictionary' 스타일로 푸는 부분을 보게 됐는데, 왜 이 스타일이 효율성 측면에서 좋은건지 잘 이해가 안되고 모르겠다.
어쨌든 평소에 잘 안 쓰던 문법, 그리고 Object.values()
메서드도 새삼 알았으니 다음 코테에서도 최대한 써봐야겠다.
function solution(k, tangerine) {
let answer = 0;
const dictionary = {};
tangerine.forEach((item) => dictionary[item] = (dictionary[item] || 0) + 1);
const array = Object.values(dictionary).sort((a, b) => b - a);
let count = 0;
array.forEach((value, index) => {
answer += 1;
count += value;
if (count >= k) {
array.splice(index + 1);
}
});
return answer;
}
오랜만에 푼 코테. 안뇽-