[프로그래머스] 순열검사(kotlin)

Elen li·2022년 10월 3일
0

'프로그래밍 강의 > 알고리즘 문제 해설 > 순열 검사' 문제 보러가기

  • 입력: 10만 이하의 배열 (원소: 0 이상 10만 이하의 정수)
  • 출력: 중복된 원소가 없고, 1 ~ 배열 개수 만큼의 원소가 들어있을 때 true 출력

  1. 중복 원소를 제거하기 위해서 Set으로 Array를 변환함
    • set으로 바꾸기 전 리스트와 바꾼 후의 리스트 길이가 다르면 중복된 값이 있었다고 보고 false 출력
    • 길이가 같다면 아래에서 범위를 넘어가는 값이 있는지 확인
  2. 1 ~ 배열 개수 만큼의 원소가 들어있는지는 collection의 none 메소드 사용
    • none: 조건을 만족하는 원소가 하나도 없을 경우에 true 반환
    • mutableList.none {it > arr.size}
      : 갖고있는 원소가 배열의 크기보다 큰 값이 하나도 없으면 true를 반환한다.
class Solution {
    fun solution(arr: IntArray): Boolean {
        val mutableList = arr.toMutableSet()
        
        if(mutableList.size != arr.size) {
            return false
        }
        
        return mutableList.none {it > arr.size}
    }
}

collection method (all, any, none)

fun main() {
    val array = intArrayOf(1, 1, 2, 3)
    
    println("All: ${testAll(array)}")
    println("Any: ${testAny(array)}")
    println("None: ${testNone(array)}")
}

// 모든 원소가 조건에 해당되는 경우: true
fun testAll(array: IntArray): Boolean {
	return array.all{ it < 4 }
}

// 하나라도 조건에 맞는 원소가 있을 경우: true
fun testAny(array: IntArray): Boolean {
    return array.any{ it == 2 }
}

// 하나도 조건에 맞지 않을 경우: true
fun testNone(array: IntArray): Boolean {
    return array.none{ it < 4 }
}

profile
Android, Flutter 앱 개발자입니다.

0개의 댓글