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