Apple is Apple

일일 회고

 

첫 팀과제를 마무리하였다.

 

같이 알고리즘 문제도 풀어보고 팀 과제도 해결해나가고...

 

이렇게 같이 공부한다는 것 자체가 값진 경험인 것 같다. 앞으로도 진행하면서 서로가 서로에게 도움을 주면서 성장할 수 있을 것 같다.


오늘의 키워드

  • 알고리즘 풀어보기

일일 알고리즘 (프로그래머스 - 최빈값 구하기)

입력 값으로 배열이 주어지고 출력값으로 배열의 최빈값을 구하거나 최빈값의 개수가 같을 때 -1을 출력하면 되는 문제이다.

 

입력예시

array result
[1,1,2,2,3,3,3] 3
[1] 1
[1,1,2,2] -1

 

반복문을 돌려가며, 숫자 종류의 갯수를 세며 찾을 수 있긴 하지만, kotlin collection funtion을 활용하면 조금더 간결하게 코드를 만들어 볼 수 있다.

 

// 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
            }
        }

 

 

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)

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

profile

Apple is Apple

@mjjjjjj