상세 컨텐츠

본문 제목

#13. 백준 2720번 (python)

공부/파이썬

by 김지똥 2025. 2. 25. 14:55

본문

 

이번 문제는 쉽겠지...?

 

일단 정답률이 70프로이기 때문에 호기롭게 도전해보았다,.

 

T = int(input())
money = list(map(int, input().split()))

coin = [25, 10, 5, 1]

change = []
remainder = []

for i in range(T):
    num1 = money[i]//coin[0] # 4
    num2 = money[i]%coin[0] # 24
    change.append(num1) # change = [4]
    remainder.append(num2) # remainder = [24]
    for j in range(len(coin)-1):
        num3 = remainder[j]//coin[j]
        num4 = remainder[j]%coin[j]
        change.append(num3)
        remainder.append(num4)
        
print(*change)

 

처음에는 이렇게 접근해보았다.

 

뭔가 머리로는 생각이 나는데 구현을 못 하겠음..

 

잘하는 사람이 옆에서 가르쳐줬으면 좋겠다..

 

처음 입력 받은 값과 그 후 업데이트 되는 값 처리를 못해서 따로 처리했다,,,

 

시간 복잡도도 생각해야되서 함부로 반복문 못 쓰겠음..ㅋㅋ

 

암튼 당연히 틀렸고..

 

 

입력 받는 부분에 문제가 있단다..

 

strip을 사용하여 \n 제거해서 다시 작성.

 

아래 코드도 좀 더 깔끔하게 수정하였다.

 

T = int(input().strip())  
money = list(map(int, input().split())) 

coin = [25, 10, 5, 1]  
result = [] 

for i in range(T):
    change = [] 
    amount = money[i]  
    
    for c in coin:
        num = amount // c  
        amount %= c  
        change.append(num)
    
    result.append(" ".join(map(str, change)))  

print("\n".join(result))

 

그래도 같은 오류 발생..

 

money 부분도 수정하였다.

 

strip 함수 사용하고 입력 빨리 받기 위해

sys.stdin.readline()

 

이것도 사용

 

import sys

T = int(sys.stdin.readline().strip())  # 테스트 개수 입력
money = [int(sys.stdin.readline().strip()) for _ in range(T)]  # 각 테스트 케이스의 금액 입력

coin = [25, 10, 5, 1]

for amount in money:
    change = []
    
    for c in coin:
        num = amount // c  # 해당 동전 개수 계산
        amount %= c  # 남은 금액 계산
        change.append(num)
    
    print(*change)  # 공백을 기준으로 출력

최종 코드는 이렇다..

 

뭔가 알겠는데 모르겠는 그런 느낌,,,

 

(사실 지피티 살짝 사용함...)

 

이번에 크게 배운 건 입력 받은 문자열 처리?

 

문자열을 정수로 변환하고 개행 문자 제거하는 것 정도 일 거 같다..

 

 

sys.stdin.readline() vs input()의 비교

 

input() : 표준 입력을 읽고 개행 문자(\n) 제거 후 반환

sys.stdin.readline() : 표준 입력을 한 줄로 읽고 개행 문자 포함하여 반환

 

그러니까 input()은 내부적으로 더 복잡한 처리 과정을 거쳐 데이터를 받아 입력값을 버퍼(buffer)에서 읽고, Python 내부적으로 처리한 뒤 반환한다. 파이썬에서 추가적인 문자열 변환 과정이 포함된다.

반면 sys.stdin.readline()은 버퍼에서 바로 읽기 때문에 속도가 더 빠르다.

 

 

  • input()  O(n) + 추가적인 처리 비용
  • sys.stdin.readline()  O(n) (단순한 버퍼 읽기 연산)

이론적으로는 이렇다고 한다.

 

많은 연산일수록 sys.stdin.readline()을 사용하면 좋을 거 같다.

 

 

'공부 > 파이썬' 카테고리의 다른 글

#13. 백준 1158번 (python)  (0) 2025.04.24
#12. 백준 2164번 (python)  (0) 2025.02.06
Optimization Methods in Finance Chapter 1.2  (2) 2024.10.27
[파이썬] return과 print의 차이  (0) 2024.08.26
#11. 백준 11718번 (python)  (0) 2024.08.10

관련글 더보기