Stay Hungry Stay Foolish

SWEA

[SWEA] 10200. 구독자 전쟁 (Python/D3)

dev스카이 2024. 10. 26. 11:27

[문제 링크] 👇

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


풀이

💡 A + B 가 N 명 이상일 때와 이하일 때로 구분한다.

  • A + B 가 N 명 이상이면 A + B 에서 N 을 뺀 게 최소가 된다.
  • 이하이면 최소 구독자는 0이다.
  • 최대 구독자는 동일하게 A, B 둘 중에 더 작은 값이 된다.

 

Solution

T = int(input())
for test_case in range(1, T + 1):
    N, A, B = map(int, input().split())
    if A + B > N:
        sub_max = min(A, B)
        sub_min = A + B - N
    else:
        sub_max = min(A, B)
        sub_min = 0
    print(f"#{test_case} {sub_max} {sub_min}")

 

수정 포인트

  • 중복 코드 정리
    • sub_max는 min(A, B)로 항상 같은 방식으로 계산되므로 if 문 바깥에서 한번만 계산해도 됩니다.
  • 조건문 단순화
    • sub_min을 계산할 때, A + B > N인 경우와 그렇지 않은 경우로 나누었으므로, if 문으로 sub_min을 직접 계산할 수 있습니다.
  • 변수와 코드의 가독성 향상
    • 변수 이름을 설명하는 주석을 추가하면 코드를 이해하기 쉽게 만들 수 있습니다.

 

수정한 코드

T = int(input())
for test_case in range(1, T + 1):
    N, A, B = map(int, input().split())
    
    # p와 t 채널 모두 구독하는 사람의 최대값은 두 구독자 수 중 작은 값
    sub_max = min(A, B)
    
    # p와 t 채널 모두 구독하는 사람의 최소값은 (A + B - N) 이상, 0 이하
    sub_min = max(0, A + B - N)
    
    print(f"#{test_case} {sub_max} {sub_min}")

 

 

 

👩‍💻 회고

사람 수 N 명이 주어진 걸 생각 못하고 풀었어서 처음엔 틀렸었다. 그래서 최대 최소를 어떻게 구하는건가,, 문제 설명이 훼이크인 거 아닌가 했었다.. 아침에 졸린 상태로 풀어서 잘 안 보인거라고 치자.