"최솟값을 출력하는 프로그램을 작성하시오."를 보고
단순히 주사위 숫자들을 정렬한 후, 그중 가장 작은 수 3개만을 이용해서 총합을 계산하는 코드를 작성하였다.
import sys
input = sys.stdin.readline
N = int(input())
arr = list(map(int, input().split()))
arr.sort()
total = 0
if N == 1:
total = sum(arr)-arr[-1]
else:
total = arr[2]*4 + arr[1]*(2*N-2)*4 + arr[0]*(5*N*N-8*N+4)
print(total)
100% 맞을줄 알았는데,, ㅠ_ㅠ
틀린 이유는 주사위의 성질 때문이었는데, 최솟값 A를 사용한다면 그 반대편에 있는 F는 사용할 수 없다!!!
참고 : A-F // B-E // C-D 이렇게 마주보는데 마주보는 수들은 리스트에서 인덱스 합이 5였다. A(0)-F(5) // B(1)-E(4) // C(2)-D(3)
그래서 처음에는, 최솟값 A와 마주보고 있는 F 빼고는 다 사용할 수 있는 거니까, del arr[5-arr.index(min(arr))]
를 사용했는데, 이 코드의 문제점은 min(arr)와 같은 수가 여러개가 있어도 그중에서 인덱스가 가장 작은 숫자를 가져온다는 문제가 있었다,,
도저히 모르겠어서 아래 블로그를 참고했다.
import sys
input = sys.stdin.readline
N = int(input())
tmp = list(map(int, input().split()))
if N == 1:
total = sum(tmp)-max(tmp)
else:
arr=[]
arr.append(min(tmp[0], tmp[5]))
arr.append(min(tmp[1], tmp[4]))
arr.append(min(tmp[2], tmp[3]))
arr.sort()
total = arr[2]*4 + arr[1]*(2*N-2)*4 + arr[0]*(5*N*N-8*N+4)
print(total)
앞으로 주사위 관련 문제가 나오면 이 문제의 풀이에 사용된 주사위의 성질을 처음부터 고려하면 풀어야겠다!!