본문 바로가기

Python

[Python/level 0] 양꼬치 - 120830, O(n) vs O(1) 풀이법 비교

문제 설명

머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다. 정수 n과 k가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요.

 

 

code - 1차

  • 시간 복잡도: O(n)
  • 설명
    • n이 10인분 미만이라면 -> n*12000, k*2000 return
    • n이 10인분 이상이고 k가 0이 아니라면 -> n이 10인분 이상이 될 때마다 k-1
    • 문제를 잘 뜯어 보았다면 굳이 for문과 if문을 돌릴 필요가 없다는 걸 알았을텐데... 상당히 아쉬움
def solution(n, k):
    if n < 10:
        return (n*12000) + (k*2000) 
    elif n >= 10 and k != 0:
        for i in range(1, (n//10)+1):
            k -= 1
    return (n*12000) + (k*2000)

 

code - 2차

  • 시간 복잡도: O(1)
  • 설명
    • 문제를 잘 읽어보자! n이 10인분이 될 때마다 k-1
      • n//10의 값을 k에서 바로 빼 준다면 위 코드처럼 for문을 돌릴 필요 없음
      • 더하여 n이 10인분이 안 된다면 n//10은 0을 반환하기 때문에, k-0 = k값은 변동사항 없음
def solution(n, k):
    # n인분이 10인분일 때마다 k-1
    return (n * 12000) + (k - (n // 10)*2000)

 

 

오늘의 다짐

  • Python group study를 시작한지 2주가 지난 지금 드디어 지문을 읽으면서 문제를 풀고 있다
  • 앞으로 알고리즘과 자료구조도 꾸준히 공부하고, Python 문법도 익혀가면서 2레벨 3레벨까지 도전해 가야지!

 

반응형