Where who wants to meet someone

주사위 게임 3 본문

728x90

문제

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

 

프로그래머스

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

programmers.co.kr

 

내 답안 / 다른 사람들의 답안

func solution(_ a:Int, _ b:Int, _ c:Int, _ d:Int) -> Int {
    let numbers = [a, b, c, d].sorted()

    // 네 주사위가 모두 같은 숫자일 때
    if numbers[0] == numbers[3] {
        return 1111 * numbers[0]
    }

    // 앞 세 개의 주사위 혹은 뒤 세 개의 주사위가 같은 숫자일 때
    else if numbers[0] == numbers[2] || numbers[1] == numbers[3] {
        let index = numbers[0] == numbers[2] ? 0 : 3
        return (10 * numbers[index] + numbers[3 - index]) * (10 * numbers[index] + numbers[3 - index])
    }

    // 두 개씩 같은 숫자일 때
    else if numbers[0] == numbers[1] && numbers[2] == numbers[3] {
        return (numbers[0] + numbers[2]) * abs(numbers[0] - numbers[2])
    }

    // 앞 두 개의 주사위 숫자가 같고 나머지 숫자가 다를 때
    else if numbers[0] == numbers[1] && numbers[2] != numbers[3] {
        return numbers[2] * numbers[3]
    }

    // 가운데 두 개의 주사위 숫자가 같고 나머지 숫자가 다를 때
    else if numbers[1] == numbers[2] && numbers[0] != numbers[3] {
        return numbers[0] * numbers[3]
    }

    // 뒤 두 개의 주사위 숫자가 같고 나머지 숫자가 다를 때
    else if numbers[0] != numbers[1] && numbers[2] == numbers[3] {
        return numbers[0] * numbers[1]
    }

    // 네 주사위가 모두 다른 숫자일 때
    return numbers[0]
}

- 중간에 반례도 나오고.. 다양한 케이스가 있어서 if..else if로 모든 경우를 분기했다.

 

import Foundation

func solution(_ a:Int, _ b:Int, _ c:Int, _ d:Int) -> Int {
    var dict: [Int: Int] = [:]

    [a, b, c, d].forEach { int in
        dict.updateValue((dict.filter { $0.key == int }.values.first ?? 0) + 1, forKey: int)
    }

    if dict.values.contains(2) {
        return dict.count == 2 ? dict.keys.reduce(0, +) * (dict.keys.max()! - dict.keys.min()!) : dict.filter { $0.value == 1 }.keys.reduce(1, *)
    }

    if dict.values.contains(3) {
        return Int(pow(Double(10 * dict.filter { $0.value == 3 }.keys.first! + dict.filter { $0.value == 1 }.keys.first!), 2))
    }

    if dict.values.contains(4) {
        return 1111 * a
    }

    return dict.keys.min()!
}

- 처음에 dictionary로 어떻게 안되나 삽질하다 넘어갔었는데.. 다른 사람들은 잘 활용해서 처리했음을 볼 수 있었다.

- dict.values.contains(2), (3) 두 경우에서 처리가 어려웠는데 해당 코드를 통해 부족했던 점을 알 수 있었다.

 

점수: +8