

해당문제에서 tangerine배열을 예시로 문제를 설명해줬다.
tangerine배열이 [1, 3, 2, 5, 4, 5, 2, 3] 이렇게 주어질때,
최대한 서로다른 종류를 유지하면서 k값에해당하는 귤의 갯수로 담으면 된다.
그 후 서로 다른종류가 몇가지가 있는지 return하면된다.
| 1. 의도 및 이유 이 코드의 목적은 주어진 배열 tangerine에서 각 요소의 등장 횟수를 계산하고, 등장 횟수가 높은 순서로 누적합이 특정 값 k를 초과하지 않는 최소 개수의 요소를 선택하는 것이다. 이는 주어진 문제에 대한 최적화된 해결 방식을 찾기위해서이다. 2. 코드 동작 로직
3. 버그 또는 에러 및 해결
|
1. 해시맵 생성 및 초기화:
val tangerineMap = hashMapOf<Int,Int>()
배열 tangerine의 각 요소의 등장 횟수를 저장하기 위한 해시맵을 생성했다.
2. 배열 순회 및 등장 횟수 계산:
tangerine.forEach{ // [1, 3, 2, 5, 4, 5, 2, 3]
t->
tangerineMap[t] = (tangerineMap[t] ?:0) + 1 //tangerineMap = {1=1, 2=2, 3=2, 4=1, 5=2}
}
배열 tangerine을 순회하면서 각 요소의 등장 횟수를 tangerineMap에 기록한다.
만약 해동 요소가 이미 등장한 적이 있다면, 기존 횟수에 1을 더하고, 처음 등장한 요소라면 1로 초기화한다.
3. 등장 횟수에 따라 내림차순 정렬:
val sortedValues = tangerineMap.values.sortedDescending() //[2, 2, 2, 1, 1]
tangerineMap의 값들을 등장 횟수를 기준으로 내림차순 정렬함
4. 누적합 및 결과 계산:
var sum = 0
for (value in sortedValues) {
sum += value
answer++
if (sum >= k) {
break
}
}
정렬된 등장 횟수를 순회하면서 누적합을 계산하고, 그때마다 answer을 1씩 증가시킨다.
만약 누적합이 주어진 값 k를 초과하면 루프를 종료한다.
- keep: 문제풀기전 해결방법 정리 후 문제풀기, 알고리즘적 사고로 생각 정리하기
- problem: 생각이 복잡하고 조급해함, gpt를 사용하지 않더라도 개념이 부족하여 검색 및 문제를 참조해서 푸는 경향이 있음.-> 나만의 생각이 없어진다는 느낌
- try: 아직도 생각하는 시간이 너무 오래걸리고, 알고리즘을 집중적으로 공부한적이 없어서 부트캠프기간 마치기전 시기에는 30분내로 풀수있게끔 실력다지기
'TIL > kotlin 알고리즘' 카테고리의 다른 글
| kotlin 프로그래머스 lv2 연속 부분 수열 합의 개수 (0) | 2024.03.07 |
|---|---|
| kotlin 프로그래머스 lv2 괄호 회전하기 (1) | 2024.03.06 |
| kotlin 프로그래머스 lv2 멀리 뛰기 (0) | 2024.03.05 |
| kotlin 프로그래머스 lv1 N개의 최소공배수 (0) | 2024.02.29 |
| kotlin 프로그래머스 lv1 예상 대진표 (0) | 2024.02.28 |