ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algorithm#6] 백준 2480 주사위 세개 (Python)
    Programming/Algorithm Pb 2026. 3. 19. 09:30
    반응형
    목표

     

    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개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.

     

    입력

     

    첫째 줄에 3개의 눈이 빈칸을 사이에 두고 각각 주어진다.

     

    출력

     

    첫째 줄에 게임의 상금을 출력 한다.

     

    1. 단순 조건문 활용

     

    변수 설정 

    • 세가지 주사위를 저장할 정수 변수 a,b,c

    풀이 방법:

    1. 세가지 입력 값이 첫 줄로 입력됨으로 map, input, split을 활용하여 받는다. 
    2. 같은 값이 3개일때, 2개일때, 모두 다를 때를 조건분기로 처리 한다.
      1. 같은 값이 3개일 때 (a == b == c) 조건 분기 후 a * 1000 + 10000 출력
      2. 같은 값이 2개일 때 비교 값이 3개 이기 때문에 조건 분기를 2개로 처리 
        1. b를 기준으로 같은 값이 있는지 확인 a == b or b == c 
        2. b가 그 어느 값도 같지 않다면 a 와 c가 같은지 확인 a == c
        3. b * 100 + 1000 출력 or a * 100 + 1000 출력
      3. 모두 값이 다를 때이므로 else 분기 후 최대값을 통해 계산
        1. 최대값을 활용하기 위해서는 max 함수를 활용하여 계산 max(a, b, c) * 100
    a,b,c = map(int, input().split())
    
    if a == b == c :
        print(a*1000+10000)
    elif a == b or b == c :
        print(b*100 + 1000)
    elif a == c :
        print(a*100 + 1000)
    else : 
        print(max(a,b,c) * 100)

     

    2. set과 수학적 접근 활용

     

    변수 설정 

    • 세가지 주사위를 저장할 정수 리스트 dice

    풀이 방법:

    1. 세가지 입력 값이 첫 줄로 입력됨으로 map으로 입력 값을 받고 list로 변환한다.
    2. 같은 값이 3개일때, 2개일때, 모두 다를 때를 조건분기로 처리 한다.
      1. 같은 값이 3개일 때 set 함수를 활용하여 list 내부 중복 값을 제거 후 len으로 길이를 확인한다.
        1. 10000 + dice[0] * 1000 출력
      2. 같은 값이 2개일 때 set 함수를 활용하여 list 내부 중복 값을 제거 후 len으로 길이를 확인한다.
        1. 1000 + dice[0] * 100 출력
      3. 모두 다를 때는 위 1번 방법과 같은 방식으로 max를 활용하여 처리 한다.
    dice = list(map(int, input().split()))
    
    #같은 눈 3개
    if len(set(dice)) == 1:
        print(10000 + dice[0] * 1000)
    #같은 눈 2개
    elif len(set(dice)) == 2:
        same = sum(dice) - sum(set(dice))
        print(1000 + same * 100)
    #모두 다른 눈
    else:
        print(max(dice) * 100)

     

    비교 항목 첫 번째 코드 (if/elif) 두 번째 코드 (set 활용)
    가독성 매우 좋음 (직관적) 보통 (수학적 트릭 파악 필요)
    연산 속도 미세하게 더 빠름 미세하게 느림 (무의미한 차이)
    코드의 유연성 주사위 3개일 때 최적화 파이썬의 자료구조를 잘 활용함
    반응형
Designed by Tistory.