728x90
반응형

👨💻 아무생각없이 문제를 읽고 리스트에 담아서.. 크기별로 개수를 맵에 담은 다음에.. 그 개수를 다시 리스트에 담아서.. 정렬하고.. 역으로 돌린 다음에 순차적으로 더했을 때 k보다 같거나 크면 끝내 보자!!라는 생각을 하고 바로 코드를 짜보았다. 너무 길어지고 효율성도 너무 똥일 것같았지만 일단 해보았다. 레벨 2부터는 효율성도 따지길래 틀렸을 거라고 생각했는데 성공은 했다 ㅋㅋ

😅 살벌하다.. 메모리와 시간이 너무 비효율적이다. 나는 항상 독특하게 생각해서 코테 푸는게 재밌다. 하지만 개발자로써는 효율성을 중요하게 따져야하기 때문에 앞으로는 효율성을 따지면서 풀어봐야겠다.
int k = 6;
int[] orange = {1, 3, 2, 5, 4, 5, 2, 3};
List<Integer> list = new ArrayList<>();
for(int value : orange) {
list.add(value);
}
Map<Integer, Integer> map = new HashMap<>();
for(int num : list) {
map.put(num, map.getOrDefault(num, 0) + 1);
}
List<Integer> countOrange = new ArrayList<>();
map.forEach((number, counter) -> {
countOrange.add(counter);
});
Collections.sort(countOrange);
Collections.reverse(countOrange);
int sum = 0;
int temp = 0;
for(int i=0; i<countOrange.size(); i++) {
temp += countOrange.get(i);
if(temp >= k) {
sum++;
break;
} else {
sum++;
}
}
System.out.println(sum);
🙃 map.getOrDefault(num, 0)
num의 빈도를 map에 저장한다. num이 map에 없으면 0을 반환한다. 한 마디로 리스트 인덱스 값들의 개수를 값으로 인덱스 값을 키로 한다.
{1=1}
{1=1, 3=1}
{1=1, 2=1, 3=1}
{1=1, 2=1, 3=1, 5=1}
{1=1, 2=1, 3=1, 4=1, 5=1}
{1=1, 2=1, 3=1, 4=1, 5=2}
{1=1, 2=2, 3=1, 4=1, 5=2}
{1=1, 2=2, 3=2, 4=1, 5=2}
🙃 map.forEach
반복하면서 값을 리스트에 담아준다.
{1=1, 2=2, 3=2, 4=1, 5=2}
🙃 그 후에 큰 값들로 내림차순 리스트를 만들고 앞에부터 더해가면 최소의 종류를 구할 수 있다!!!!
➡️ 코드를 막 짜서 지저분해가지구 가독성 좋게 리팩토링 해보자
class Solution03 {
public int solution(int k, int[] orange) {
Map<Integer, Integer> map = new HashMap<>();
for(int num : orange) {
map.put(num, map.getOrDefault(num, 0) + 1);
}
List<Integer> countOrange = new ArrayList<>(map.values());
Collections.sort(countOrange, Collections.reverseOrder());
int sum = 0, temp = 0;
for(int count : countOrange) {
temp += count;
sum++;
if(temp >= k) break;
}
return sum;
}
}
💡 위의 지저분한 코드와 같은 로직이지만 더 깔끔해졌다!

➡️ 시간과 메모리는 확실히 줄었지만.. 여전히 비효율적이다. 다음엔 효율적으로 풀어보자!
728x90
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
| [ 프로그래머스 / DFS, BFS ] 단어 변환(level 3) (1) | 2024.01.28 |
|---|---|
| [프로그래머스/Java] 짝지어 제거하기 (1) | 2023.12.28 |
| [프로그래머스/Java]가장 가까운 같은 글자, 두 개 뽑아서 더하기 (1) | 2023.09.30 |
| [프로그래머스/Java]Comparator와 copyOfRange (0) | 2023.09.30 |
| [프로그래머스/Java] 정수 제곱근 판별 (0) | 2023.09.13 |