Daily LeetCode Challenge - 2306. Naming a Company

Min Young Kim·2023년 2월 9일
0

algorithm

목록 보기
69/198

Problem From.

https://leetcode.com/problems/naming-a-company/

오늘 문제는 주어진 리스트 ideas 에서 각 글자를 뽑아서 앞 글자를 바꾸었을때,
그 단어가 둘다 ideas 안에 없으면 유효한 이름으로 생각하여 추가하는 문제였다.

이 문제는 안되는 경우를 생각해서 그 경우를 빼는 식으로 생각하면 됐었는데,
먼저 앞글자가 서로 같으면 제외를 시켜야한다.
또한, 앞글자를 제외한 글자가 서로 같으면 그 경우의 수도 제외하여야 한다.

그렇게해서 남은 경우를 구한 다음 두배를 해주면 답이 나온다.

idea 리스트에서 앞글자가 같은 글자들끼리 모은 리스트를 만든다. 그 리스트들을 각각 비교하는데 같은 요소가 있다면 제외하고 아래와 같은 식을 만든다.
(첫번째 리스트 크기 - 같은 요소의 수) (두번째 리스트 크기 같은 요소의 수)
이러면 다른 이름의 조합이 나오는데, 그 다른 이름의 조합은 앞뒤가 바뀔 수 있으므로 두배를 해준다. 위 연산을 모든 리스트에 한번씩 해주면 답을 얻을 수 있다.

class Solution {
    fun distinctNames(ideas: Array<String>): Long {
        var num = 0L
        val ideasMap = ideas.groupBy ({ it[0] },{it.removeRange(0 until 1) }).values.toList()
        for(i in ideasMap.indices){
            for(j in i+1 until ideasMap.size){
                val intersectTwoList = ideasMap[i].intersect(ideasMap[j].toSet()).size
                num += (2 * (ideasMap[i].size-intersectTwoList ) * ((ideasMap[j].size)-intersectTwoList))
            }
        }
        return num
    }
}
profile
길을 찾는 개발자

0개의 댓글