https://school.programmers.co.kr/learn/courses/30/lessons/82612
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
* 부족한 금액 계산하기 *
새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다.
이 놀이기구의 원래 이용료는 "price"원 인데,
놀이기구를 "N" 번 째 이용한다면 원래 이용료의 "N"배를 받기로 하였습니다.
즉, 처음 이용료가 "100"이었다면 2번째에는 "200", 3번째에는 "300"으로 요금이 인상됩니다.
놀이기구를 "count"번 타게 되면 현재 자신이 가지고 있는 금액에서
얼마가 모자라는지를 "return" 하도록 "solution" 함수를 완성하세요.
단, 금액이 부족하지 않으면 "0"을 "return"하세요.
* 제한사항 *
놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수
처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수
놀이기구의 이용 횟수 count : 1 ≤ count ≤ 2,500, count는 자연수
* 알고리즘 분석과 이해 *
이 알고리즘은 수학적 계산과 조건문을 사용하여 해결할 수 있습니다.
놀이기구를 "count" 번 탈 때 필요한 금액을 계산하고,
주어진 "money"와 비교하여 부족한 금액을 반환하면 됩니다.
* 로직구상 *
놀이기구의 이용료를 계산하기 위해 "price"에 "count"를 곱해보고,
현재 가지고 있는 금액 "money"와 계산된 이용료를 비교합니다.
만약에 계산된 이용료가 현재 가지고 있는 금액보다 많다면
부족한 금액을 계산하여 반환하고 부족한 금액이 없다면 "0"을 반환합니다.
* 코드구성 *
func solution(_ price: Int, _ money: Int, _ count: Int) -> Int64 {
먼저 함수를 정의해주고, 매개변수를 선언해줍시다.
( '_' 언더바는 매개변수의 외부 이름을 생략하고 내부에서만 사용하겠다는 의미)
'price', 'money', 'count'는 각각 놀이기구의 이용료, 보유 금액, 놀이기구를 탄 횟수를 나타내고
Int64 타입을 사용하여 더 큰 범위의 정수를 다룰 수 있도록 해줍시다.
var totalCost: Int64 = 0
이용료의 총합을 저장하는 변수를 선언해주고
'Int64' 타입을 사용하여 더 큰 범위의 정수를 다룰 수 있도록 해줍시다.
이후 이용료의 총합을 '0'으로 초기화 시켜줍시다.
for i in 1...count {
반복문을 사용하여 'i' 변수를 만들고 범위를 지정해주는데,
'1'부터 'count'까지의 값을 가지도록 해줍니다.
totalCost += Int64(price * i)
+= 복합 할당 연산자로, 왼쪽 변수에 오른쪽 값을 더한 후 다시 왼쪽 변수에 저장해주는데,
'price * i'를 계산한 결과를 'Int64'로 형 변환하여 'totalCost'에 더해주고
놀이기구를 탈 때마다 이용료를 계산하여 총합에 더해주도록 해줍시다.
let shortage = totalCost - Int64(money)
상수 'shortage'을 선언해주는데 이 상수는 부족한 금액을 저장하는 공간입니다.
이후 'totalCost' 이용료의 총합에서 보유 금액을 뺀 값을 'shortage'에 저장합니다.
놀이기구 이용료를 모두 계산한 후 보유 금액을 빼서 부족한 금액을 계산해줍시다.
return max(0, shortage)
"max(0, shortage)" 두 개의 값 중에서 더 큰 값을 반환 해주는데
부족한 금액이 '0'보다 작으면 '0'을 반환하고,
그렇지 않으면 부족한 금액을 반환해 줍니다.
이렇게 해서 음수인 경우는 '0'으로 처리하여
음수가 나오지 않도록 합니다.
* 전체 코드 구성 *
import Foundation
func solution(_ price: Int, _ money: Int, _ count: Int) -> Int64 {
var totalCost: Int64 = 0
// 놀이기구를 탈 때마다 이용료를 더합니다.
for i in 1...count {
totalCost += Int64(price * i)
}
// 부족한 금액 계산
let shortage = totalCost - Int64(money)
// 부족한 금액이 없으면 0을 반환, 있으면 부족한 금액을 반환
return max(0, shortage)
}
'IOS > Swift-Algorithm (Programmers)' 카테고리의 다른 글
[Swift]Programmers - 문자열 다루기 기본 (0) | 2024.03.19 |
---|---|
[Swift] Programmers - 문자열 내림차순으로 배치하기 (0) | 2024.03.15 |
[Swift] Programmers - 약수의 개수와 덧셈 (0) | 2024.03.14 |
[Swift] Programmers - 내적 (0) | 2024.03.13 |
[Swift] Programmers - 수박수박수박수박수박수? (0) | 2024.03.12 |