TIL of Algorithm

문제

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

> 3 3 6 
1300

예제 입력 & 출력 2

> 2 2 2
12000

예제 입력 & 출력 3

> 6 2 5
600

작성 코드

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

# print("My version")
dice = [0] * 6
a, b, c = list(map(int, input().split()))
dice[a - 1] += 1
dice[b - 1] += 1
dice[c - 1] += 1

max_num = 1
for j in dice:
if max_num < j:
max_num = j

if max_num == 1:
  print(max(a, max(b, c)) * 100)
elif max_num == 2:
  print(1000 + (a*100)) if a == c else print(1000 + (b*100))
else :
  print(10000 + (a*1000))

# 최적화 극한으로 한 경우
# 파이썬은 삼단으로 조건 확인해도 되는 듯?
# 삼항연산자를 적극 활용함 [ture] if condition else [false]
#print("boj version")
a, b, c=map(int, input().split())
print(10000+1000*a if a==b==c else 1000+100*b if a==b or b==c else 1000+100*a if c==a else 100*max(a, b, c))

후기

파이썬에 적응하면서 서서히 문제를 풀어보고자 처음부터 안 했던 부분들 위주로 풀고 있다. 오늘의 핵심은 삼항 연산자의 형태가 생각보다 신기하다는 점. 더불어 극한으로 쥐어짠 버전을 보니 세개의 변수를 조건으로 연산하는 것도 가능하다는 것도 하나 배운거라면 배운거다.

더불어, timer 를 개수했다. 다음과 같이 사용하면 해당 파이썬 프로그램에 대하여 실행 속도를 확인할수 있다.

import time
import subprocess

start_time = time.time()

## source code
file_path = "/Users/ryuhansol/workspace/helloAlgorithms/boj/haryu/2480.py"

# 표준 입력으로 전달할 데이터
input_data = "6 2 5" # 표준 입력으로 전달할 데이터를 입력하세요

# Popen 객체 생성
process = subprocess.Popen(["python3", file_path], stdin=subprocess.PIPE)

# 표준 입력으로 데이터 전송
process.communicate(input_data.encode()) # 문자열 데이터를 바이트로 변환하여 전송

end_time = time.time()
elapsed_time = end_time - start_time
elapsed_time_formatted = round(elapsed_time, 2)
print("Code Processed: ", elapsed_time_formatted, "sec")