[Swift] 프로그래머스(위클리 챌린지 1주차) -부족한 금액 계산하기
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
이 글을 참고해보니 사칙연산별 연산속도가 미세하게나마 차이가 나더군요.
CPU 성능과 같은 여러 가지 환경에 따라 연산속도의 차이가 있지만 기본적으로 사칙연산별 연산속도가 조금씩 다르다는 걸 알게되었습니다.
이 미세한 차이가 시간초과에 영향을 미치는지는 잘 모르겠지만요...
시간초과의 원인이 이 문제가 아니라면 알고계신 분께서 알려주시면 감사하겠습니다.