Stay Hungry Stay Foolish

SWEA

[SWEA] 3142. 영준이와 신비한 뿔의 숲 (Python/D3)

dev스카이 2024. 10. 26. 13:19

[문제 링크] 👇 

 

SW Expert Academy

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

swexpertacademy.com


풀이

설정

  • x 를 유니콘(뿔 1개)의 마리 수, y 를 트윈혼(뿔 2개)의 마리 수라고 하면,
    • x + y = M (총 짐승의 마리 수는 M이다)
    • x + 2y = N (뿔의 총 개수는 N이다)

 

💡 연립 방정식을 통해 유니콘(x)과 트윈혼(y)의 값을 계산

  • y = N - M
  • x = M - y

 

Solution

T = int(input())
for test_case in range(1, T + 1):
    N, M = map(int, input().split())
    # 방정식으로부터 유니콘과 트윈혼의 수 계산
    twin_horn = N - M
    unicorn = M - twin_horn
    print(f"#{test_case} {unicorn} {twin_horn}")

 

 

👩‍💻 회고

몫과 나머지를 이용했더니 테스트 케이스가 풀려서 아래 코드를 제출했는데 틀렸다고 한다. 다른 테스트 케이스로도 시도 해봤는데도 다 되길래 그렇게 푸는 건 줄 알았다.앞으로 고정된 비율이 주어질 땐 연립 방정식을 이용해보자.

 

틀린 풀이

    unicorn, twin_horn = 0, 0
    while N % M > 0:
        quotient = N // M  # 몫
        division = N % M  # 나머지
        N -= division  # 나머지를 뿔의 개수에서 빼주기
        M -= quotient  # 몫을 짐승의 수에서 빼주기
        if quotient == 1 and division == 2:
            twin_horn += 1
        elif quotient == 1 and division == 1:
            unicorn += 1
    print(f"#{test_case} {unicorn} {twin_horn + 1}")

 

위 코드가 틀린 이유

이 문제의 조건에서는 뿔이 한 개 달린 유니콘과 뿔이 두 개 달린 트윈혼의 수가 특정 연립방정식을 통해 고정된 비율로 결정된다. 하지만 몫과 나머지를 이용하는 방식은 일정한 패턴 없이 나머지를 제거하며 값을 조정하려는 방식이라, 연립방정식에서 요구하는 일정한 관계를 만족하지 못한다. 결과적으로 문제의 조건에 맞는 유일한 해를 찾는 것이 아니라 잘못된 값을 계속 빼내어 결국 오답을 출력하게 되는 것이다.

 

몫과 나머지 접근의 한계

  • 조건과 관계없는 조정
    • 문제에서는 정확한 유니콘과 트윈혼의 수를 요구하지만, 몫과 나머지를 이용한 접근은 일관된 패턴이 없으므로 조정의 기준이 없다. 따라서 반복적으로 나머지를 빼고 조건을 맞추려고 해도, 문제의 조건을 만족하는 일정한 결과를 찾을 수 없다.
  • 조건을 수학적으로 충족시키지 않음
    • 주어진 문제에서는 xx와 yy가 특정한 관계(x+y=Mx + y = M, x+2y=Nx + 2y = N)를 만족해야 한다. 하지만 몫과 나머지를 이용하는 방식은 이 관계를 수학적으로 해결하지 않기 때문에 올바른 해를 얻을 수 없다.

따라서 이 문제는 연립방정식을 이용하여 유일한 해를 구하는 방식이 적절하며, 이를 통해서만 문제의 조건을 충족하는 유니콘과 트윈혼의 수를 정확하게 계산할 수 있다.