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
'프로그래머스 알고리즘 문제 기록 > 코딩 기초 트레이닝' 카테고리의 다른 글
9로 나눈 나머지 (0) | 2024.01.17 |
---|---|
글자 이어 붙여 문자열 만들기 (0) | 2024.01.17 |
간단한 논리 연산 (0) | 2024.01.16 |
배열 만들기 4 (0) | 2024.01.16 |
콜라츠 수열 만들기 (0) | 2024.01.16 |