백준1041(파이썬) - 주사위
resilient
·2021. 5. 22. 16:59
728x90
반응형
https://www.acmicpc.net/problem/1041
- 이 문제는 처음에 문제를 잘못읽어서 엄청 쉬운문제인줄 알았다..
- 주사위가 한 면이 보일 때, 두 면이 보일 때, 세 면이 보일 때 의 경우가 존재한다.
- 한 면은 주어진 숫자 중에 가장 작은 원소를 골라주면되고,
- 두 면일 때는 처음엔 combinations을 써서 경우의 수를 다 계산해줬는데 잘못된 선택이였다.
- 두 면, 세 면일때 마주보는 면끼리는 만나지 않는다는 점을 고려해서 핵심코드를 작성했다.
- 정답 코드아래 있는 코드는 내가 삽질 하면서 막코딩을 해본 결과이다...
import sys
input = sys.stdin.readline
n = int(input())
data = list(map(int,input().split()))
result = 0
if n ==1 :
data.sort()
cnt = 0
for i in range(5):
result += data[i]
else:
Min = []
#핵심코드
Min.append(min(data[0],data[5]))
Min.append(min(data[1],data[4]))
Min.append(min(data[2],data[3]))
Min.sort()
one = Min[0]
two = Min[0]+Min[1]
three = Min[0]+Min[1]+Min[2]
result = (two)*((n-1)*4+(n-2)*4) + (three)*4 + (n-2)**2*one + 4*(n-2)*(n-1)*one
print(result)
아래코드
one = min(data)
Min = 50
three_list = [0,1,2,3,4,5]
three_list = list(combinations(three_list,3))
temp1 = []
for i in range(len(three_list)):
if i == 2 or i == 3 or i==4 or i==6 or i==8 or i==9 or i==10 or i== 11 or i==13 or i==15 or i==16:
continue
else:
temp1.append(three_list[i])
for i in temp1:
q,w,e = i
if Min > data[q]+ data[w] + data[e]:
Min = data[q]+ data[w] + data[e]
three = Min
Min2 = 50
two_list = [0,1,2,3,4,5]
two_list = list(combinations(two_list,2))
temp2 = []
for i in range(len(two_list)):
if i==4 or i == 7 or i== 9:
continue
else:
temp2.append(two_list[i])
for i in temp2:
a,b, = i
if Min2 > data[a]+data[b]:
Min2 = data[a]+data[b]
two = Min2
반응형
'자료구조 & 알고리즘 > 백준(Baekjoon)' 카테고리의 다른 글
백준1946(파이썬) - 신입사원 (0) | 2021.05.22 |
---|---|
백준2156(파이썬) - 포도주 시식 (0) | 2021.05.22 |
백준2667(파이썬) - 단지번호붙이기 (0) | 2021.05.21 |
백준7576(파이썬) - 토마토 (0) | 2021.05.20 |
백준2110(파이썬) - 공유기 설치 (0) | 2021.05.19 |