iOS 개발일기

[Swift] 프로그래머스(위클리 챌린지 1주차) -부족한 금액 계산하기 본문

코딩테스트

[Swift] 프로그래머스(위클리 챌린지 1주차) -부족한 금액 계산하기

맨날 까먹으니 적어두자 2021. 8. 6. 16:23

https://programmers.co.kr/learn/courses/30/lessons/82612

 

코딩테스트 연습 - 1주차

새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이

programmers.co.kr

 

나의 풀이

func solution(_ price: Int, _ money: Int, _ count: Int) -> Int64 {
    let totalPrice = (0..<count).map({($0 + 1) * price}).reduce(0, +)
    return totalPrice < money ? 0 : Int64(totalPrice - money)
}

 

가독성을 고려한 다른 풀이들

 

풀이 1.

func solution(_ price: Int, _ money: Int, _ count: Int) -> Int64 {
    var answer = money
    for i in 0..<count {
    	answer -= (i + 1) * price
    }
    
    return answer < 0 ? -Int64(answer) : 0
}

 

풀이 2.

func solution(_ price: Int, _ money: Int, _ count: Int) -> Int64 {
    var total = 0
    for i in 0..<count {
    	total += (i + 1) * price
    }
    
    return total - money < 0 ? 0 : Int64(total - money)
}

풀이 2의 경우에는 해답은 될 수 있지만 일부 문제에서 시간초과가 떴었습니다.

재실행했을 경우에는 시간초과가 뜨지않았지만 왜 이런 현상이 일어났는지 궁금해져서 검색을 조금 해봤습니다.

 

추가된 풀이

func solution(_ price: Int, _ money: Int, _ count: Int) -> Int64 {
    let total = price * (count * (count + 1)) / 2
    return money >= total ? 0 : Int64(total - money)
}

다른 언어로 풀이를 하신 분들 대부분이 가우스 공식을 사용하여 풀었더군요.

아직 배울게 많습니다...

 

https://post.naver.com/viewer/postView.nhn?volumeNo=27517848 

 

내 컴퓨터는 1초에 몇 번 연산이 가능할까?

[BY LG상남도서관] 많은 사람들이 컴퓨터를 구입하면서 챙겨보는 것 중 하나가 CPU(중앙처리장치)이다. ...

m.post.naver.com

이 글을 참고해보니 사칙연산별 연산속도가 미세하게나마 차이가 나더군요.

 

출처 : https://post.naver.com/viewer/postView.nhn?volumeNo=27517848

CPU 성능과 같은 여러 가지 환경에 따라 연산속도의 차이가 있지만 기본적으로 사칙연산별 연산속도가 조금씩 다르다는 걸 알게되었습니다.

 

이 미세한 차이가 시간초과에 영향을 미치는지는 잘 모르겠지만요...

시간초과의 원인이 이 문제가 아니라면 알고계신 분께서 알려주시면 감사하겠습니다.