본문 바로가기
알고리즘/프로그래머스 PS

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

by 빛밤하늘 2021. 8. 4.
반응형

밑의 링크는 프로그래머스에서의 문제 링크입니다.

 

코딩테스트 연습 - 1주차

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

programmers.co.kr

 

 

 

 

 

 

 

 

주의해야 할 

저처럼 등차수열의 합의 공식을 이용해서 푼다면 공식을 기억하고 있어야 풀 수 있습니다.

저도 까먹고 있었지만, 최근에 등차수열에 대해 한 번 볼 일이 있어서 기억해내고 풀 수 있었습니다.

 

등차수열의 합

 

만약 등차수열의 합이 기억이 안 나신다면 그냥 반복문을 이용해서 푸실 수 있습니다.

 

 

 

생각한 풀이 과정

  1. 놀이기구를 count번 타는데 필요한 금액을 등차수열의 합을 이용해서 구하고 cost 변수에 저장합니다. 등차수열에서 첫 번째 항 a1은 money, 공차 d도 money, 항의 개수 n은 count입니다.
  2. 가지고 있는 금액에서 필요한 금액만큼 모자란 금액을 계산하고 lack_money 변수에 저장합니다.
  3. 만약 모자라지 않다면 lack_money에는 0을 저장합니다.
  4. 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까지의 합을 구하는데

무작정 반복문을 사용하는 것보다는 수학 공식을 사용하면 더 빠른 속도로 구현할 수 있다는 예제가 떠올랐습니다.

 

그래서 문제의 예제를 읽어보니 등차수열의 합을 이용하면 굳이 반복문을 사용하지 않아도 구현할 수 있다고 생각했고,

위의 코드를 구현했습니다.

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

반응형

댓글