강의로 돌아가기
정세훈

testcase 13, 15, 18을 통과못하네요 이유가뭘까요..?

무엇이 문제일까요??

작성중인 코드―Solution.swift
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import Foundation


func solution(_ users:[[Int]], _ emoticons:[Int]) -> [Int] {

    var maxMoney = 0
    var maxUserNumber = 0
    let sales = [10,20,30,40]

    func dfs(_ depth:Int, _ saleArr:[Int]){
        if depth == emoticons.count {
          var totalNumber = 0
          var totalMoney = 0
          for user in users{
              var totalUserMoney = 0
              for (index, saleIndex) in saleArr.enumerated(){
                  let salePercent = sales[saleIndex]
                  let emoticonPrice = emoticons[index] 
                  if user[0] <= salePercent { totalUserMoney += Int(Double(emoticonPrice) * (Double(100 - salePercent) / 100)) }
              }
              if totalUserMoney < user[1]{
                 totalMoney += totalUserMoney
              } else{
                 totalNumber += 1
              }
          }
            if maxUserNumber < totalNumber {
                maxUserNumber = totalNumber
                maxMoney = totalMoney
            } else if maxUserNumber == totalNumber && maxMoney < totalMoney{
                maxMoney = totalMoney
            }
        } else{
          for number in 0...3{
              dfs(depth+1, saleArr+[number])
          }  
        } 
    }

    dfs(0,[])

    return [maxUserNumber, maxMoney]
}
  • rhino

    Int(Double(emoticonPrice) * (Double(100 - salePercent) / 100)) 이 부분이 문제 일 수 있겠네요. 이모티콘 가격이 100 이상 세일도 10,20,30,40 밖에 없어서 Double로 처리할 필요 없습니다. Double없이 연산해서 한 번 해보세요

    rhino―2023.01.19 19:25
2 개의 답변
나는객체다

저도 Swift 에서 똑같은 문제 겪었는데

Int(Double(emoticonPrice) * (Double(100 - salePercent) / 100))

이부분이 문제였습니다. 연산 순서를 다르게 하니 되더라구요;;;; 왜이러는지는 모르겠습니다.

수식을 간단하게 바꿔서 표시해보자면

(100 - x) / 100 * y // 오답 (13, 15, 18)
(100 - x) * y / 100 // 정답
y * (100 - x) / 100 // 정답
(100 - x) * 0.01 * y // 정답

이렇게 나오네여;;

  • 정세훈

    감사합니다..!

    정세훈―2023.01.25 18:03
균2022

컴퓨터는 소수점 연산을 잘 못해서 그럽니다. 일일이 print 해서 보시면 678.9999999 이런 식으로 나와요. 나눗셈을 최대한 뒤에서 해야 (최대한큰수 / 100)이 돼서 오류가 덜 납니다. 문제에서 굳이 100의 배수라고 준 게 이거 때문 같더라고요.

  • 정세훈

    이런이유였군요...

    정세훈―2023.01.25 18:03
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.