본문 바로가기
프로그래머스 Algorithm

[프로그래머스] 의상 풀이 Kotlin

by Echung 2024. 1. 23.

thumbnail

안녕하세요. 이번에는 프로그래머스 의상 문제를 풀어보려고 합니다. 

Problem


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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

Solution


class Solution {
    fun solution(clothes: Array<Array<String>>): Int {
        var answer = 1

        clothes.groupBy { it[1] }.forEach { answer *= (it.value.size + 1) }

        return answer - 1
    }
}

 이번 문제는 GroupBy를 통하여 문제를 해결해 보았습니다.

코드 풀이 

headgear yellow_hat
  green_turban
eyewear blue_sunglasses

headgear을 착용하는 경우의 수는 3가지입니다.

1. yellow_hat을 착용합니다.

2. green_turban을 착용합니다.

3. 아무것도 입지 않는다.

eyewear을 착용하는 경우의 수는 2가지입니다.

1. blue_sunglasses을 착용합니다.

2. 아무것도 입지 않는다.

그래서 3 * 2를 하면 6을 얻을 수 있습니다. 여기서 문제에서 코니는 하루에 최소 한 개의 의상은 입기 때문에 아무것도 입지 않는 경우의 수는 제외해줘야 합니다. 그래서 (3 * 2) - 1을 해주면 값을 얻을 수 있습니다. 이것을 코드로 알아보도록 하겠습니다.

1. groupBy을 통해서 종류들의 경우의 수를 구해줍니다. 

clothes.groupBy { it[1] }

2. groupBy로 구해진 값을 forEach로 모든 경우의 수를 구해줍니다.

// 여기에서 입지 않는 경우의 수도 더하기 1 해줍니다.
forEach { answer *= (it.value.size + 1) }

3. 마지막으로 아무것도 입지 않는 경우의 수를 제외해 줍니다.

return answer - 1

  

1. 다른 사람 코드

class Solution {
    fun solution(clothes: Array<Array<String>>): Int {
        return clothes.groupBy { it[1] }.values.fold(1) { acc, v -> acc * (v.size + 1) }  - 1
    }
}

 

이번 코드는 저와 비슷한 방법으로 문제를 풀이한 코드지만 kotlin에서 제공해주는 컬랙션 내의 데이터를 모두 모으는 fold함수를 사용한 것이 눈에 띄워서 공부용으로 가져와보았습니다. fold함수를 통해서 초기값을 1로 설정하고 문제를 풀이한 것을 확인할 수 있었습니다. 코틀린에서 제공해주는 함수를 잘 활용하도록 저도 열심히 연습해봐야겠습니다.

Performance

1. 내가 작성한 코드 2. 다른 사람 코드
반응형