TIL/kotlin 알고리즘
kotlin 프로그래머스 lv1 로또의 최고 순위와 최저 순위
crablo
2024. 2. 13. 16:43
728x90
문제를 풀면서 lottos에서 0인 요소와 0이 아닌 요소를 win_nums와 비교하면서 counting
해야겠다는 생각이 들어 forEachIndexed 구문이 바로 생각났다.
하지만 문제는 바로 풀리진 않았다.
순위를 구하는 과정에서 계속 애를 먹었기 때문이다.
countMatch 와 countZero 변수를 만들어서
각각 count 갯수를 담아주었다. 방법은 아래와 같이 했다.
lottos배열을 돌면서 0인 요소에서 win_nums의 요소와 모두 일치하면
랭크가 올라가기 때문에 highestRank에는 countZero 도 카운팅 해줬다.
하지만 0인요소가 당첨되지 않는경우는 counting을 배제했다.
하지만 랭크는 1~6까지 밖에 없어서 각각의 카운트를 더한값들이 1은 넘어가게끔
coerceAtLeast 함수를 통해 조정했다.
coerceAtLeast 함수를 잠시 설명하면
범위를 설정하는 함수라고 간단히 말할 수 있다.
위에서 countMach는 lottos배열에서 0이 아닌 요소의 값이
win_nums에 존재하면 자연스럽게 카운트 되도록 설정했다.
결과적으로 다음과 같이 계산을 해주면 맞는 결과가 나온다.
생각보다 등수 조정할때 애를 먹었다.
그래서 검색의 힘이 필요했고, 덕분에 몰랐던것을 익힐 수 있게 되었다.
728x90