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

[프로그래머스] 추억 점수 Kotlin

by Echung 2023. 12. 22.
thumbnail
thumbnail

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

 

Problem


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

 

프로그래머스

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

programmers.co.kr

 

Solution


class Solution {
    fun solution(name: Array<String>, yearning: IntArray, photo: Array<Array<String>>): IntArray {
        var answer: IntArray = intArrayOf()

        var hashMap = HashMap<String, Int>()

        name.forEachIndexed { index, s ->
            hashMap.put(s, yearning[index])
        }

        photo.forEachIndexed { i, array -> 
            var sum = 0
            array.map {
                sum += hashMap.getOrDefault(it, 0)
            }

            answer += sum
       }

        return answer
    }
}

 이번 문제는 hashMap을 사용해서 문제를 풀어보았습니다. hashMap은 key 값과 value 값을 넣을 수 있어서 이러한 문제를 풀 때 유용합니다.

1. name을 key값에 넣어주고 yearning을 value값에 넣어줍니다.

2. getOrDefault를 사용하여 photo를 돌면서 key 값이 존재하면 value 값을 없으면 0을 출력하도록 합니다.

3. 출력된 값들을 answer에 저장하고 answer을 리턴해주면 문제는 마무리됩니다.

 

1. 다른 사람 코드

class Solution {
    fun solution(names: Array<String>, yearnings: IntArray, photoes: Array<Array<String>>): IntArray {
        val map = names.zip(yearnings.toTypedArray()).toMap()
        return photoes.map { photo -> photo.sumOf { map[it] ?: 0 } }.toIntArray()
    }
}

 저의 코드와 다르게 Kotlin에서 제공해 주는 함수들을 잘 활용해서 좀 더 가독성이 좋은 코드를 가져와보았습니다. 

 

코드 분석

1. zip() 함수를 사용해서 list로 합쳐주면서 map으로 key, value 값으로 바꿔줍니다.

val map = names.zip(yearnings.toTypedArray())
// [(may, 5), (kein, 10), (kain, 1), (radi, 3)] zip을 사용하면 이런식으로 names와 yearnings가 묶입니다.
.toMap()
// toMap으로 key와 value값으로 만들어 줍니다. 
// may=5, kein=10, kain=1, radi=3 < 로 묶이는 것을 확인할 수 있습니다.

2. photo를 map 함수를 통해서 하나씩 순환하면서 sumOf 함수를 사용해서 배열 안의 값들의 합을 구합니다.

photoes.map { photo -> photo.sumOf { map[it] ?: 0 } }.toIntArray()
// sumOf 함수를 통해서 배열의 원소들을 순환하면서 key 값이 존재하면 value를 없으면 0을 더해주도록 합니다.
// 마지막으로 문제에서 요구하는 toIntArray() 타입으로 변환해서 return 해줍니다.

 

다른 사람의 코드를 통해서 sumOf() 함수와 활용법에 대하여 알게 되었습니다. 아직 Kotlin 사용이 미숙하지만 그래도 다른 사람들의 코드를 보면서 Kotlin 문법에 익숙해지는 시간을 가져야겠습니다.


Performance

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

반응형