[Python] 주사위 - 백준 1041

찐새·2022년 7월 6일
0

코딩테스트

목록 보기
19/53
post-thumbnail

주사위 - 백준 1041

풀이

Thinking (1)

주사위는 눈 2개씩 짝을 이룬다. [A, B, C, D, E, F] 주사위는 [A, F], [B, E], [C, D]가 짝을 이루고, 하나가 보일 때 다른 눈은 보이지 않는다.

min_dice = [min(dice[i], dice[-(i+1)]) for i in range(3)]

list[-(i+1)]은 뒤에서부터 인덱스를 찾는다. 짝이 맞는 눈을 비교해 작은 값을 리스트에 추가한다.

Thinking (2)

n5이고 주사위 눈이 [1, 2, 3, 4, 5, 6]이라면, 육면체에서 보이는 면은 그림과 같다.

  1. 정면과 후면은 제일 작은 눈값 min_dice[0]n ** 2만큼 곱한 후 2배이다.
  2. 측면은 다음으로 작은 눈값 min_dice[1]n * 2만큼 곱과 제일 작은 눈값 `min_dice[0]n * (n - 2)만큼 곱을 더한 후 2배이다.
  3. 윗면은 꼭짓점에 세 번째 값 min_dice[2] 4개와 min_dice[1] * (n-2)4개, 그리고 min_dice[0] * (n - 2) * (n - 2)을 더한 값이다.
  4. 위 1, 2, 3을 모두 더해 출력한다.

Thinking (3)

잘 맞다가 자꾸 마지막에 틀리는 이유를 몰랐다. 검색으로 알아보니 n = 1인 경우를 간과했다. 이때는 제일 큰 수를 제외한 나머지를 합하면 된다.

전체 코드

from sys import stdin
input = stdin.readline

n = int(input())
dice = list(map(int, input().split()))
if n == 1:
    dice.sort()
    print(sum(dice[:5]))
    exit(0)
min_dice = [min(dice[i], dice[-(i+1)]) for i in range(3)]
min_dice.sort()

a = (min_dice[0] * n ** 2) * 2
b = ((min_dice[1] * n * 2) + (min_dice[0] * n * (n - 2))) * 2
c = (min_dice[2] * 4) + (min_dice[1] * (n-2) * 4) + (min_dice[0] * (n - 2) * (n - 2))

print(a + b + c)
profile
프론트엔드 개발자가 되고 싶다

0개의 댓글