Algorithm/백준 알고리즘 파이썬(int-i)
[2476]주사위 게임
이숨인
2023. 4. 24. 18:22
1. 문제
2. 내 풀이 + 알고리즘
N = int(input())
max_prize=0
for i in range(N):
value= list(map(int,input().split()))
value.sort()
if (value[0]==value[2]): #같은 눈이 3개인 경우
prize= 10000+ value[0]*1000
elif(value[0]== value[1] or value[1] == value[2]): #같은 눈이 두 개인 경우
prize=1000+ value[1]*100
else: #모두 다른 눈인 경우
prize=value[2]*100
if (max_prize < prize):
max_prize = prize
print(max_prize)
3. 인프런 강의
n=int(input())
res=0
for i in range(n):
tmp=input().split() #tmp에, 그대로 '문자화된' 리스트가 들어간다.
tmp.sort() # 오름차순 정렬
a,b,c = map(int,tmp) #리스트에 있는 문자가 숫자화되어서, a,b,c에 일대일 대응 된다
#if문을 쓸 때 -> 가장 좋은 것을 if문으로 해야함!
if a==b and b==c: #세 개 모두 같을 경우
money=10000+a*1000
elif a==b or b==c:
money=1000+(b*100)
else: #세 개가 같을 경우
money=c*100
if money>res:
res=money
print(res)
4. 잘한 점
- max를 기준으로, 계속해서 최대 금액을 초기화하는 기본적인 알고리즘을 잘 써먹었다.
-sort함수를 적용할 생각을 스스로 하였다
5. 반성할 점
- 조건문 if/else등을 사용하는 것에 있어서, 조건의 내용을 더욱 간소화시킬 수 있었음에도 복잡하게 조건을 적었다.
예를 들어, 위에 나의 답이 수정되기 전에는
N = int(input())
max_prize=0
for i in range(N):
value= list(map(int,input().split()))
value.sort()
if (value[0]==value[1] and value[1]==value[2] and value[0] == value[2] ):
prize= 10000+ value[0]*1000
else:
if(value[0] != value[1] and value[1] != value[2] and value[0] != value[2]):
prize=value[0]*100
elif(value[0]==value[1]):
prize=1000 + value[0]*100
else:
prize=value[1]*100
if (max_prize < prize):
max_prize = prize
print(max_prize)
위와 같이 코드를 작성하였는데, 저렇게 모든 조건을 다 탐색하지 않아도,
sort를 적용한 후이니, 가장 큰 값 value[0]과 가장 작은 값 value[1]을 기준으로,
같은 값이 3개일 때 -> 2개일 때 -> 0개일 때 를 더욱 간소화하여 판단할 수 있었을 것이다.
6. 새로 알게 된 내용
- tmp = input().split() 을 하면, 입력한 값이 리스트화 되어서 출력되는데, 각각의 원소들은 '문자'이다.
출력결과는 위와 같다.
- 매핑
- 리스트에 있는 문자가 숫자화되어서, a,b,c에 일대일 대응 된다
- if / elif / else .. 문을 쓸 때는, 가장 좋은 조건을 if문에 넣는다!
- 즉, 이 문제에서는 가장 큰 금액을 얻을 수 있는 a=b=c를 if문에 넣는다