꾸준히 합시다

백준 파이썬 1758번: 알바생 강호 본문

코딩 테스트 문제 풀이

백준 파이썬 1758번: 알바생 강호

tturbo0824 2021. 3. 4. 00:00

www.acmicpc.net/problem/1758

 

1758번: 알바생 강호

첫째 줄에 스타박스 앞에 서 있는 사람의 수 N이 주어진다. N은 100,000보다 작은 자연수이다. 둘째 줄부터 총 N개의 줄에 각 사람이 주려고 하는 팁이 주어진다. 팁은 100,000보다 작거나 같은 자연수

www.acmicpc.net

문제 유형: 그리디

 

# Solution 1 (210301 제출) - input() 사용

n = int(input())

tip_list = []

for i in range(n):
    tip = int(input())
    tip_list.append(tip)

tip_list.sort(reverse=True)
total = 0

for i in range(len(tip_list)):
    real_tip = tip_list[i] - i + 1
    if real_tip <= 0:
        break
    total += real_tip

print(total)

 

# Solution 2 (210302 제출) - sys 모듈 사용

import sys

n = int(input())

total_tip = []
count = 0

for _ in range(n):
    total_tip.append(int(sys.stdin.readline().strip()))

total_tip.sort(reverse=True)

for i in range(n):
    tip = total_tip[i] - i
    if tip > 0:
        count += tip
        
print(count)

 

두 가지 Solution 모두 접근법은 같다. 팁을 가장 많이 받기 위해서는 팁을 많이 줄 생각을 하고 있는 사람을 우선순위로 배치하면 된다. 두 가지 다 통과되었으나 sys 모듈을 사용하니 처리 시간이 현저히 낮아졌다. sys 모듈을 주피터 노트북에서 사용하면 계속 에러가 나기 때문에 터미널 내 파이썬 쉘에서 테스트하고 있다.

Comments