[프로그래머스 | Swift | Lv.0] 주사위 게임2

Juhee Kim·2025년 4월 28일

알고리즘 풀이

목록 보기
4/9

문제 링크


풀이 1: 오답

import Foundation

func solution(_ a:Int, _ b:Int, _ c:Int) -> Int {
    var result = 0

    if (a == b) && (a == c) {
        result = (a + b + c) * (a^2 + b^2 + c^2) * (a^3 + b^3 + c^3)
    } else if (a == b) || (b == c) || (a == c) {
        result = (a + b + c) * (a^2 + b^2 + c^2)
    } else {
        result = a + b + c
    }
    
    return result
}

오답 원인

  • Swift에서는 ^ 연산자가 제곱이 아닌 비트 XOR 연산자로 사용된다.
  • 따라서 숫자를 제곱할 때 n^2와 같은 표기법을 사용할 수 없다.

풀이 2: 수정된 코드

import Foundation

func solution(_ a:Int, _ b:Int, _ c:Int) -> Int {
    var result = 0
    let sum1 = a + b + c
    let sum2 = a*a + b*b + c*c
    let sum3 = a*a*a + b*b*b + c*c*c

    if (a == b) && (a == c) {
        result = sum1 * sum2 * sum3
    } else if (a == b) || (b == c) || (a == c) {
        result = sum1 * sum2
    } else {
        result = sum1
    }
    
    return result
}

pow 함수를 사용하지 않은 이유

  • pow() 함수는 Double 타입에서 작동한다.
    이 함수를 사용하려면 a, b, c가 Int 타입이기에, 이를 Double로 변환해야 하는 번거로움이 있다.

  • 모든 계산이 Double로 이루어지므로 결과도 Double이 된다.
    Int 타입의 결과를 위해 한 번 더 변환이 필요하다.

  • 정밀도 문제
    매우 큰 숫자의 경우 부동 소수점 연산의 정밀도 한계로 인해 정확한 결과를 얻지 못할 수 있다.

  • 성능
    pow() 함수는 일반 곱셈보다 계산 비용이 더 크다. 특히 2제곱과 3제곱은 곱셈(*)을 통해 직접 표현하는 것이 더 효율적이다.


^ 연산이 XOR 연산으로 처리된다니. C언어와는 달라서 당연히 풀리겠거니 생각한 문제가 오답처리 돼서 당황했다.
4제곱 이상 시에는 pow 함수 쓰기, 3제곱 이하라면 직접 곱하기 기억하기.

profile
개: 개롭지만 발: 발전하는중

0개의 댓글