일일 회고
첫 팀과제를 마무리하였다.
같이 알고리즘 문제도 풀어보고 팀 과제도 해결해나가고...
이렇게 같이 공부한다는 것 자체가 값진 경험인 것 같다. 앞으로도 진행하면서 서로가 서로에게 도움을 주면서 성장할 수 있을 것 같다.
오늘의 키워드
- 알고리즘 풀어보기
1. 일일 알고리즘 (프로그래머스 - 최빈값 구하기)
입력 값으로 배열이 주어지고 출력값으로 배열의 최빈값을 구하거나 최빈값의 개수가 같을 때 -1을 출력하면 되는 문제이다.
입력예시
array | result |
[1,1,2,2,3,3,3] | 3 |
[1] | 1 |
[1,1,2,2] | -1 |
반복문을 돌려가며, 숫자 종류의 갯수를 세며 찾을 수 있긴 하지만, kotlin collection funtion을 활용하면 조금더 간결하게 코드를 만들어 볼 수 있다.
<kotlin />
// array - 입력 배열
array.groupBy{it}.map{it.key to it.value.size}.run {
val max = sortedByDescending {it.second}.first().second
val sorted = filter {it.second == max}
when {
sorted.size > 1 -> -1
else -> sorted[0].first
}
}
<kotlin />array.groupBy{it}.map{it.key to it.value.size}
--> groupBy 메소드를 이용하여 같은 요소끼리 묶음 ex) [1,1,2,2] -> {1=[1,1], 2= [2,2]} Map형태로 같은 요소끼리 묶이게됨
--> 컬렉션 변형함수인 map을 사용하여 List<Pair<Int, Int>> 형식으로 변환, 첫 번째 값은 요소 그 자체, 두 번째 값은 그 요소의 갯수 (value.size) ex) {1=[1,1], 2= [2,2]} -> [(1,2), (2,2)]
Scope 함수 내부(run)
<kotlin />
val max = sortedByDescending {it.second}.first().second
val sorted = filter {it.second == max}
when {
sorted.size > 1 -> -1
else -> sorted[0].first
}
-> max = 위에서 map을 통해 만들어진 리스트에서 요소의 갯수가 가장 큰 값을 뽑아냄
-> sorted = 전체 리스트에서 최빈값의 요소의 개수가 max개인 리스트들만 뽑아냄
-> when절 -> 뽑아낸 리스트가 1개보다 많다면 여러개 있다는 뜻으로 -1을 return, 그렇지 않다면 최빈값 return
'내일배움캠프 7기 > TIL' 카테고리의 다른 글
내일배움캠프 7기 Android TIL 13일차 (2023.08.01) (0) | 2023.08.01 |
---|---|
내일배움캠프 7기 Android TIL 12일차 (2023.07.31) (0) | 2023.07.31 |
내일배움캠프 7기 Android TIL 10일차 (2023.07.27) (0) | 2023.07.27 |
내일배움캠프 7기 Android TIL 9일차 (2023.07.26) (0) | 2023.07.26 |
내일배움캠프 7기 Android TIL 8일차 (2023.07.25) (0) | 2023.07.25 |