티스토리 뷰

Algorithm/Baekjoon

[Swift] 백준 9375번: 패션왕 신혜빈

내일은개발천재🎵 2022. 4. 19. 17:02

 문제 사이트 

 

9375번: 패션왕 신해빈

첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로   (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다.

www.acmicpc.net


 알고리즘 

1. 테스트 케이스 입력받고, 반복문 수행

2. n 입력받기

3. n이 0일 경우, 0 출력 후 continue
    이 코드 없으면 런타임에러나요!

4. n만큼 반복하며 Dictionary 입력받기 ( 키가 있는경우, 없는 경우 구분해서 받아야해요)

5. value + 1을 구하여 result_arr에 삽입 
    첫번째 키에 (A, B)라는 옷이 있을 때, A를 입을수도, B를 입을 수도, 둘 다 안입을 수도 있습니다.
    둘 다 안 입을 경우도 고려하기 위해 +1 을 해줍니다.

6. result_arr에 존재하는 원소 곱한 후 -1
    집합 A, B, C가 있을 때 {안입기, 안입기, 안입기} 라는 부분집합의 경우의 수 (1가지)를 빼주는 것입니다.


 나의 코드 

for _ in 0..<Int(readLine()!)!{ // testcase만큼 반복
    var result_arr: [Int] = [] // 각 value + 1을 넣을 배열
    var dic = [String: [String]]()
    let n = Int(readLine()!)!
    if n == 0{ // 이 코드 없으면 runtimeError 발생 
        print(0)
        continue
    }

    for _ in 0..<n{ // n만큼 반복
        let value: [String] = readLine()!.split(separator: " ").map{ String($0) }
        
        if dic.keys.contains(value[1]){ // 이미 존재한다면 
            dic[value[1]]!.append(value[0]) // append
        } else { // 없다면
            dic[value[1]] = [value[0]] // key 생성
        }
    }
    for (_, value) in dic{
        result_arr.append(value.count + 1) // value의 길이 + 1을 삽입
    }
    print(mul(numbers: result_arr) - 1) // 각 값의 곱을 구한 후 -1 하여 출력
    
}

func mul(numbers: [Int]) -> Int{
    numbers.reduce(1, *)
}

 Key Point 

📍 Dictionary 선언하기!
      Dictionary를 [String: String] 으로 선언하면, value가 나누어지지 않습니다.
      key = "value1value2value3" 이런식으로 나타남 -> [String:[String]] 으로 선언

📍Dictionary 입력하기!
    Dictionary에 key가 존재하는지 확인하여 각각 다른 연산을 수행해야한다.
    그렇지 않으면, 항상 값을 덮어쓰게 된다.

📍  reduce 이용하여 배열의 곱 구하기

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함