[ 백준 문제 2480 / 파이썬 ] 주사위 세개

2023. 2. 5. 17:31백준/파이썬

 

2480번: 주사위 세개

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.  같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.  같은 눈이 2개

www.acmicpc.net

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 

  1. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다. 
  2. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다. 
  3. 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.  

예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다.

3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.

 

나의 정답:

방법 1)

A, B, C = map(int, input().split())

if A==B==C:
    print(10000 + A * 1000)
elif A==B!=C or C==A!=B:
    print(1000 + A * 100)
elif B==C!=A:
    print(1000 + C * 100)
else:
    if A>B>C or A>C>B:
        print(A * 100)
    elif B>A>C or B>C>A:
        print(B * 100)
    elif C>A>B or C>B>A:
        print(C * 100)

딱봐도 복잡하지 않나요..

 

더 간단하게 코드를 작성할 방법이 있을 것 같습니다.

 

방법2)

A, B, C = map(int, input().split())

if A==B==C:
    print(10000 + A * 1000)
elif A == B or A == C:
    print(1000 + A * 100)
elif B == C:
    print(1000 + C * 100)
else:
    print(max(A,B,C) * 100)

조건문의 특성을 생각해봤습니다.

위에서부터 조건이 충족하는지 따지고 조건을 충족하지 못하면 다음 if문으로 내려옵니다.

 

이 말인 즉슨

if A==B==C:
    print(10000 + A * 1000)

를 충족하지 않을 때 다음 else if문이 작동된다는 것입니다.

 

그렇다면 

elif A==B!=C or C==A!=B:
    print(1000 + A * 100)
elif B==C!=A:
    print(1000 + C * 100)

이렇게 써줄 필요가 없게 되죠.

 

elif A == B or A == C:
    print(1000 + A * 100)
elif B == C:
    print(1000 + C * 100)

더 간단하게 고쳤습니다.

 

else:
    if A>B>C or A>C>B:
        print(A * 100)
    elif B>A>C or B>C>A:
        print(B * 100)
    elif C>A>B or C>B>A:
        print(C * 100)

이 코드 역시 너무 복잡하니까 고쳐줍시다.

 

매개변수로 받은 인자값 중 최대값을 리턴해주는 함수

max()

 

max() 이용하여

else:
    print(max(A,B,C) * 100)

훨씬 간단한 표현이 가능합니다:)