티스토리 뷰
문제
: 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.
- 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
- 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
- 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×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. 입력
첫째 줄에 3개의 눈이 빈칸을 사이에 두고 각각 주어진다.
2. 출력
첫째 줄에 게임의 상금을 출력 한다.

문제 풀이
<내 풀이>
int(input())으로 연도를 입력받는다.
1) 조건문 if문 활용하여 그대로 조건을 입력하였다.
각 세 개의 수를 각각 변수 a,b,c에 할당하여 계산하였다.
a,b,c = map(int,input().split())
if a==b==c: # 3개의 눈이 모두 같은 경우
print(10000+a*1000)
# 3개 중 2개의 눈이 같은 경우
elif a==b or a==c:
print(1000+ a*100)
elif b==c:
print(1000+ b*100)
else: # 3개의 눈이 모두 다른 경우
print(max(a,b,c)*100)
2) set 자료형을 이용하기 위해 세 개의 수를 list로 받아 계산하였다.
set 자료형은 중복되는 요소를 삭제하기 때문에 이러한 문제를 해결할 수 있다.
l = list(map(int,input().split()))
if len(set(l)) ==1: # 3개의 눈이 모두 같은 경우
print(10000+l[0]*1000)
elif len(set(l)) ==2: # 3개 중 2개의 눈이 같은 경우
for i in set(l):
if l.count(i) ==2: # count()함수로 눈이 2개인 것을 추출
print(1000+ i*100)
break
else: # 3개의 눈이 모두 다른 경우
print(max(l)*100)
+) 참고
max() 함수는 문자열, 리스트에서 최대값을 반환해 주는 함수이다.
'max(값)' 형태로, 값이 숫자이면 최대값을 반환하고, 값이 문자열이면 알파벳 순서상 뒤에 오는 문자열을 반환한다.
ex_list= [1, 2, 10, 10, 10, 4, 5]
print(ex_list.count(10)) # 3
print(ex_list.count(5)) # 1
+) 참고
count() 함수는 문자열, 리스트에서 찾고 싶은 문자의 개수를 찾을 수 있다.
'변수.count(찾는 요소)' 형태로, 찾고자 하는 값을 입력하면 변수 안에서 해당 값의 개수를 숫자로 반환
ex_list1 = [1,2,3,10]
ex_list2 = ['a','b','x']
print(max(ex_list1)) # 10
print(max(ex_list2)) # x
<숏 코딩>
문자열 인덱스를 활용하였고, 상금 계산의 규칙을 찾아내 다음과 같이 코드를 짰다.
*_, a, b, c=sorted(input())
print(['1'+b, c][a < b < c]+'000'[a < c:])
예제를 통해 코드를 하나씩 뜯어보자.
sorted() 함수를 통해 입력받은 문자열을 오름차순으로 정렬하여 리스트로 반환한다.
['1'+b, c][a < b < c] 부터 보자.
a, b, c가 각자 다른 숫자라면, ['1'+b, c][True]로 c의 값이 반환된다.
두 개의 값이라도 같다면, ['1'+b, c][False]로 '1'+b의 값이 반환된다.
'000'[a < c:] 는 문자열 슬라이싱을 활용한 것으로,
3개의 눈이 같은 경우에는 '000'[0:]로 000이 3개 붙고,
2개의 눈이 같거나, 다 다른 경우에는 '000'[1:]로 00이 2개만 붙는다.
예를 들어, 3 3 3이 경우,
['1'+b, c][False]로, '1'+b의 값인 13이 반환되고,
'000'[0:]로, 000개가 반환된다.
이 2개의 값을 합쳐 출력값은 13000이 된다.
예를 들어, 3 3 6이 경우,
['1'+b, c][False]로, '1'+b의 값인 13이 반환되고,
'000'[1:]로, 00개가 반환된다.
이 2개의 값을 합쳐 출력값은 1300이 된다.
예를 들어, 3 4 5이 경우,
['1'+b, c][True]로, c의 값인 5가 반환되고,
'000'[1:]로, 00개가 반환된다.
이 2개의 값을 합쳐 출력값은 500이 된다.
+) 참고
다음은 unpacking을 사용하여 정렬된 리스트의 값을 변수에 할당하는 코드이다. [unpakcing에 대해서 더 알아보기]
*_, a,b,c = sorted(input())
*_ 는 리시트의 나머지 값을 받기 위한 변수이다.
( ' _'는 자주 사용되지 않는 값이나 무시할 값을 할당하는데 사용된다.
즉, 여기서 '*_'은 나머지 값을 무시하겠다는 의미로 사용된다.)
따라서, a, b, c는 정렬된 리스트의 마지막 세 요소를 각각 할당받는 것이다.
다음 예시를 보면 더 이해가 될 것이다.
#정렬된 리스트가 3개일 경우
*_, a,b,c = [1,2,3]
print(_) # []
print(a) # 1
print(b) # 2
print(c) # 3
#정렬된 리스트가 3개이상일 경우
*_, a,b,c = [1,2,3,4,5,6,7]
print(_) # [1,2,3,4]
print(a) # 5
print(b) # 6
print(c) # 7
'코딩 > 백준' 카테고리의 다른 글
[백준/BOJ] 10950번: A+B-3(Python 파이썬) (0) | 2024.05.18 |
---|---|
[백준/BOJ] 2739번: 구구단 (Python 파이썬) (0) | 2024.05.18 |
[백준/BOJ] 2884번: 알람 시계 (Python 파이썬) (0) | 2024.05.17 |
[백준/BOJ] 14681번: 사분면 고르기 (Python 파이썬) (0) | 2024.05.17 |
[백준/BOJ] 2753번: 윤년 (Python 파이썬) (0) | 2024.05.16 |
- Total
- Today
- Yesterday
- Andrew Ng
- computation graph
- 로지스틱 회귀
- state value function
- 강의노트 정리
- 경사하강법
- adrew ng 머신러닝 강의
- numpy 배열 속성
- *
- 딥러닝
- policy function
- 앤드류응
- NumPy
- 11870
- 비용함수
- 손실함수
- **kwargs
- Sort
- action value function
- 강화학습
- 숏코딩
- numpy 배열 생성
- 백준
- *args
- omp: error #15
- baekjoon
- 파이썬
- python
- **
- sorted
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |