코틀린/코딩테스트

코딩테스트 [머쓱이보다 키 큰 사람]

정혜현 2024. 6. 12. 09:25

문제

머쓱이는 학교에서 키 순으로 줄을 설 때 몇 번째로 서야 하는지 궁금해졌습니다. 머쓱이네 반 친구들의 키가 담긴 정수 배열 array와 머쓱이의 키 height가 매개변수로 주어질 때, 머쓱이보다 키 큰 사람 수를 return 하도록 solution 함수를 완성해보세요.

https://school.programmers.co.kr/learn/courses/30/lessons/120585


 

풀이

1. 접근

1.1 관찰

기능 : array에서 height보다 큰 수를 확인한다. 개수를 담는다.

반환 : 개수를 리턴한다.

 

 

 

 

2. 시행착오

2.1 시도

  • 가설 : count에 {}조건으로 it이 height보다 큰지 확인하여 개수를 세면 될 것이다.
class Solution {
    fun solution(array: IntArray, height: Int): Int {
        var answer: Int = 0
        answer = array.count{it > height}
        return answer
    }
}
  • 검증 : 성공

최대한 줄여보았다.

class Solution {
    fun solution(array: IntArray, height: Int): Int {
        return array.count{it > height}
    }
}

 

it이 궁금해졌다.

it
람다식에서 사용되는 암묵적인 매개변수. 단일 파라미터만 사용 가능. 하나일 경우에만  
컴파일러가 추론할 수 있으므로 모호하거나 중첩, 파라미터가 여러 개일 경우에는 파라미터명을 명시한다.
 요소를 가리키는 매개변수명은 element

 

그렇다면 it 대신 element를 넣으면 될까?

class Solution {
    fun solution(array: IntArray, height: Int): Int {
        return array.count{element > height}
    }
}

 

안된다. 타입 미스매치가 뜬다. 왜?

/Solution.kt:3:27: error: type mismatch: inferred type is Unit but Boolean was expected
        return array.count{element > height}
                          ^
/Solution.kt:3:28: error: unresolved reference: element
        return array.count{element > height}
                           ^

element가 어떤 요소인지 정의되지 않았기 때문이다. for문에서는 따로 정의하지 않았는데 어떻게 사용했을까? (i in)으로 i가 정의된 것이다. 모든 요소는 정의되어야한다. element in array로 해봤더니 여전히 타입 미스매치로 정의되지 않는다. 해당 부분은 람다식을 공부하고 해석을 추가하기로 한다.

+ 2024. 06.17 람다식과 it은 해당링크로 정리해두었다. https://hhyun-s2.tistory.com/53

마찬가지로 아래와 같이 줄일 수 있다.

class Solution {
    fun solution(array: IntArray, height: Int): Int = array.count{it > height}
}

 


회고

중복된 숫자 개수 코딩테스트와 동일하다.