위장

푸른하늘·2022년 5월 6일
0
post-thumbnail

위장이 아픈 당신에게 ... 에헴...

<설명>

  1. clothes를 2차원 배열로 받아서 Int로 값을 넘겨주는 solution 함수
  2. hashmap을 <String,Int> 으로 생성한다.
  3. clothes 배열을 돌면서 index [1]인 배열을 type으로 지정한다
    // "headgear", "eyewear","face" .. etc
  4. getOrDefalut를 사용하여 type은 키값 그외는 Int로 받아서 만든다
    // 값이 없을 경우 0 값이 있을경우 +1 을 해준다.
    // 밑에 headger 키값에 존재하는 값이 2 개 / everweaer 1개가 된다.
  5. map의 value값을 iteraotr() 함수를 선언한다. => it
  6. it.hasNext => 다음 요소들이 있는 지 확인 없으면 while 빠져나온다.
  7. answer 에 들어온값 + 입지않은 경우 추가 한다.
    // headager (2 * 1 + 1 ) = 3
    // eyeweaer 2
  8. 3 * 2 - 1 = 5 답이 나온다.
fun solution(clothes: Array<Array<String>>): Int {

  	//1. 옷의 종류별로 구분한다.
    val map = HashMap<String, Int>()
    for (clothe in clothes) {
        val type = clothe[1]
        map[type] = map.getOrDefault(type, 0) + 1
    }
    //2. 입지 않는 경우를 추가해서 모든 조합을 계산한다.
    val it: Iterator<Int> = map.values.iterator()
    var answer = 1
    while (it.hasNext()) 
    answer *= it.next() + 1
    
    // 3. 아무종류도 잆지 않는 경우를 제외한다.
    return answer - 1
}


fun main(){
    println(solution(arrayOf(arrayOf("yellowhat","headgear"),
    arrayOf("bluesunglasses", "eyewear"),
    arrayOf("green_turban", "headgear"))))
}

short version

위에는 java 라이브러리를 사용했기에 scope kotlin을 사용해보자

fun solution(clothes: Array<Array<String>>): Int {
    var answer = 1
    val map = HashMap<String, Int>()
    for (cloth in clothes) {
        map[cloth[1]]?.let { map.put(cloth[1], it + 1) } ?: map.put(cloth[1], 1)
    }
    for (i in map) { answer *= (i.value +1)}
    return answer - 1
}

fun main(){

   println(solution(arrayOf(arrayOf("yellowhat","headgear"),
       arrayOf("bluesunglasses", "eyewear"),
       arrayOf("green_turban", "headgear"))))


}
profile
Developer-Android-CK

0개의 댓글