반응형
밑의 링크는 프로그래머스에서의 문제 링크입니다.
주의해야 할 점
저처럼 등차수열의 합의 공식을 이용해서 푼다면 공식을 기억하고 있어야 풀 수 있습니다.
저도 까먹고 있었지만, 최근에 등차수열에 대해 한 번 볼 일이 있어서 기억해내고 풀 수 있었습니다.
만약 등차수열의 합이 기억이 안 나신다면 그냥 반복문을 이용해서 푸실 수 있습니다.
생각한 풀이 과정
- 놀이기구를 count번 타는데 필요한 금액을 등차수열의 합을 이용해서 구하고 cost 변수에 저장합니다. 등차수열에서 첫 번째 항 a1은 money, 공차 d도 money, 항의 개수 n은 count입니다.
- 가지고 있는 금액에서 필요한 금액만큼 모자란 금액을 계산하고 lack_money 변수에 저장합니다.
- 만약 모자라지 않다면 lack_money에는 0을 저장합니다.
- lack_money의 값을 반환합니다.
제출한 파이썬 코드
# 놀이기구의 처음 이용료 price, 처음 가지고 있던 금액 money,
# 놀이기구의 이용 횟수 count가 매개변수로 주어집니다.
def solution(price, money, count):
# 놀이기구를 count번 타는데 필요한 금액을 저장하는 변수를 선언합니다.
# 등차수열의 합을 이용해서 계산합니다.
# 등차수열의 합 : n{2a + (n-1)d} / 2
cost = count * (2 * price + (count - 1) * price) // 2
# 현재 자신이 가지고 있는 금액에서
# 놀이기구를 count번 타는데 필요한 금액만큼 얼마가 모자라는지를 저장한 변수를 선언하니다.
lack_money = cost - money
# 모자라지 않다면
if lack_money < 0:
# lack_money에 0을 저장합니다.
lack_money = 0
# 모자란 금액을 반환합니다.
return lack_money
제출 결과
느낀 점
처음에는 반복문을 사용해서 풀었습니다.
그런데 문득 알고리즘 시간 복잡도에 대해서 처음 공부할 때 1부터 100까지의 합을 구하는데
무작정 반복문을 사용하는 것보다는 수학 공식을 사용하면 더 빠른 속도로 구현할 수 있다는 예제가 떠올랐습니다.
그래서 문제의 예제를 읽어보니 등차수열의 합을 이용하면 굳이 반복문을 사용하지 않아도 구현할 수 있다고 생각했고,
위의 코드를 구현했습니다.
※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.
※ 더 효율적이고 빠른 정답을 환영합니다.
반응형
댓글