본문 바로가기

알고리즘 공부/알고리즘 구현 기초

백준) 주사위 세개-파이썬

https://www.acmicpc.net/problem/2480

(브론즈 4 문제)

 

2480번: 주사위 세개

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

www.acmicpc.net

입력

1.

3 3 6

2.

2 2 2

3.

6 2 5

 

출력

1.

1300

2.

12000

3.

600

 

내 코드

 

f,s,t=map(int,input().split())
list=[]
if(f==s==t):
    result=10000+f*1000
elif(f==s and s!=t):
    result=1000+f*100
elif(s==t and f!=t):
    result=1000+s*100
elif(f==t and s!=t):
    result=1000+f*100
else:
    list.append(f)
    list.append(s)
    list.append(t)
    list.sort()
    result=list[2]*100
print(result)

풀이(생각 과정)

1번째 경우 조건식 그대로 구현하였다.

2번째의 경우 1개만 같은 경우 각각 조건을 설정하여 계산하였다.

마지막으로 최댓값을 이용해서 계산을 하는 방식이여서 리스트에 3개의 값을 먼저 대입하고 sort 함수를 통해 오름차 순으로 정렬했다. 그 후 리스트의 끝값을 가져와서 계산하였다.

 

아쉬운 점은 파이썬에 대한 지식이 모자란 탓인지 3번째 조건식에서 불필요한 계산을 많이 하였다.

 

개선된 다른 풀이

A,B,C=map(int,input().split())
max= max([A,B,C])
pp=0
if A==B==C:
    pp=A*1000+10000
    print(pp)
else:
    if A==B:
        pp=A*100+1000
    elif A==C:
        pp=A*100+1000
    elif B==C:
        pp=B*100+1000
    else:
        pp=max*100
    print(pp)

파이썬의 경우 최댓값을 구할 수 있는 max 함수가 수학적으로 이미 구현되어 있다. 따라서 대입 받은 값에 대해 max 함수를 실행하면 바로 최댓값을 구할 수 있다.

 

큰 틀을 값이 3개 전부 같은 경우와 아닌 경우로 나누고 그 후 계산하는 것이 보기에 훨씬 깔끔했다. 또한 이렇게 경우를 나눌 경우 !=을 사용할 필요 없이 같다라는 조건식 하나만 두고 진행할 수 있다.

 

파이썬 기초 지식이 모자라다는 것과 함께 조건의 큰 틀을 잡을 수 있는 능력을 길러야겠다.