Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준
- chatGPT
- 탐색알고리즘
- 코테
- 소수
- 마크다운
- 코딩문제
- 알고리즘
- 파이썬
- Python
- Markdown
- NoSQL
- mongoDB
- 그래프
- 데이터
- db
- 인프콘2024
- 마크다운문법
- Algorithm
- 몽고DB
- 그리디알고리즘
- 그리디
- 데이터베이스
- 수학
- 알고리즘기초
- database
- httpCode
- 기초
- 코딩테스트
- 수열
Archives
- Today
- Total
Dev_from the Bottom
#20. Algorithm16_python) 주사위 세 개_백준 2480 본문
문제) 주사위 세 개
- 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개의 눈이 빈칸을 사이에 두고 각각 주어진다.
출력)
- 첫째 줄에 게임의 상금을 출력한다.
step1) 시도1 : 실패
n1, n2, n3 = map(int, input().split())
if n1 == n2 == n3:
# print(n1)
price = 10000 + n1 * 1000
elif n1 == n2 or n2 == n3 or n3 == n1:
# print(n2)
price = 1000 + n2 * 100
else:
# print(n3)
price = n3 * 100
- 조건은 나누었지만, elif 절에서 같은 값을, else 절에서 최댓값을 추출해야 함
step2) 시도2 : 성공
n1, n2, n3 = map(int, input().split())
list = [n1, n2, n3]
if n1 == n2 == n3:
price = 10000 + n1 * 1000
elif n1 == n2 or n2 == n3 or n3 == n1:
if n1 == n2:
price = 1000 + n1 * 100
elif n2 == n3:
price = 1000 + n2 * 100
else:
price = 1000 + n3 * 100
else:
max = n1
for i in list:
if max < i:
max = i
# print(max)
price = max * 100
print(price)
>>>
6 2 5
600
- 정답은 맞혔지만, 코드가 너무 장황함 : 특히 elif 절 안에, if + elif +elif 절이 포함되어 있는 부분
다른 방법_case1) 두 개의 수가 같은 경우를 두 가지로 나눔
n1, n2, n3 = map(int,input().split())
if n1 == n2 == n3:
print(10000 + n1 *1000)
elif n1 == n2 or n2 == n3:
print(1000 + n2 * 100)
elif n1 == n3:
print(1000 + n1 * 100)
else:
print(max(n1, n2, n3) * 100)
다른 방법_case2) : 리스트 활용
temp=input().split(" ") # 값을 받아옴(문자열)
list=[]
for i in temp:
list.append(int(i)) # 정수형으로 바꿔서 list라는 배열에 넣음
list.sort() # 리스트 정렬
list_s = set(list) # 리스트를 집합화 시켜주고 list_s에 넣어줌
if len(list_s)==1 : # 모두 같은눈이 나왔을 때
print(10000+list[0]*100)
elif len(list_s)==3 : # 모두 다른눈이 나왔을 때
print(list[-1]*100)
else : # 2개가 같은눈이 나왔을 때
print(1000+list[1]*100) # 총 3개의 원소 중 정렬을 했을 때 중간이 같은수
다른 방법_case3) 리스트 활용2
n1, n2, n3 = map(int, input().split())
list = [n1, n2, n3]
list.sort()
# print(list)
set1 = set(list)
# print(set)
if len(set1) == 1:
print(10000 + list[0] * 1000)
elif len(set1) == 3:
print(list[-1] * 100)
else:
print(1000 + list[1] * 100)
- 그러나 딱히 메모리나 시간에 차이가 없음!ㅜㅠ
# 배운 점
- 조건문을 더욱 세심하게
- 리스트를 효과적으로 사용
- 메모리 할당과 실행 시간에 대한 고민
# 소회
- 여러 가지 방법을 고안해봤으나, 딱히 메모리나 실행 시간이 달라지지 않음
- 연산 자체가 별로 없어서 그렇겠지만, 이 문제를 어떤 방식으로 접근해야 할지 감이 잡히지는 않음
'Algorithm_study' 카테고리의 다른 글
#24. Algorithm18_python) A+B_3_백준 10950 (0) | 2022.05.29 |
---|---|
#22. Algorithm17_python) 더하기 사이클_백준 1110 (2) | 2022.05.28 |
#19. Algorithm15_python) 사분면 고르기_백준 14681 (0) | 2022.05.23 |
#18. Algorithm14_python) 두 수 비교하기_백준 1330 (0) | 2022.05.21 |
#17. Algorithm13_python) 시험 성적_백준 9498 (0) | 2022.05.20 |
Comments