[BOJ]백준#1041 Gold 5 주사위🔲🔳 (Python, 파이썬)

임준성·2022년 5월 28일
0

백준 Algorithm

목록 보기
21/59
post-thumbnail

백준 1041번
https://www.acmicpc.net/problem/1041


문제



후기

⏰ 풀이시간 60분 ++⏰

코딩적인 접근보단 기하학적으로 접근한 문제다.

일단 주사위 면에 써 있는 숫자중 N이 1인 경우를 제외하면

가장 작은 숫자 3개로 정육면체를 구성할 수 있다. 이를 위해 전개도에서 마주보는 면 중에서

작은 값을 리스트에 정렬하는 식으로 작은 숫자 3개를 정렬한 리스트를 만들었다.

(2×2×2)의 정육면체에서는 가장 작은수가 8번, 다음으로 작은 수가 1×8번, 제일 큰 수가 4번

(3×3×3)의 정육면체에서는 가장 작은수가 25번, 다음으로 작은 수가 2×8번, 제일 큰 수가 4번

(4×4×4)의 정육면체에서는 가장 작은수가 52번, 다음으로 작은 수가 3×8번, 제일 큰 수가 4번

즉 N이 1이 아닐 때, 두번 째로 작은 수는 (N-1)*8번, 제일 큰 수는 무조건 4번 ,

가장 작은 수는 이를 제외한 값 만큼 나온다는 규칙을 찾았고, 이를 코드에 적용했다.

문제를 푸는 방법엔 여러 방법이 있겠지만, 나중에 코딩테스트를 볼 때나

실제 업무를 할 때도 어쨌든 문제를 끝까지 해결하는 능력이 필요하다고 생각하기 때문에

내가 자신있는 방법으로 문제를 푸는것에 집중한 문제였다.

N이 1일때는 처음의 리스트에서 가장 큰 값을 제외한 나머지의 값들을 더해주면 된다.

N이 1이 아닐 때는 위의 규칙을 적용하여 코드로 만들어 주면 답을 구할 수 있었다

나의 풀이

import sys

input = sys.stdin.readline

N = int(input())

li = (list(map(int,input().split())))

sorted_li = sorted(li)

# 주사위의 전개도에 따라 정렬 

new_li = []
new_li.append(min(li[0], li[5]))  #A는 F면과 마주본다
new_li.append(min(li[1], li[4]))  #B는 E면과 마주본다
new_li.append(min(li[2], li[3]))  #C는 D면과 마주본다
new_li.sort()

K = (N*N*5) #곱해야하는 면의 개수 (EX) 면이 2개면 구해야하는 면은 20, 3개면 45 4개면 80.... )

T = 8 * (N-1) 

if N == 1:
    print( sorted_li[0] + sorted_li[1]+sorted_li[2]+sorted_li[3]+sorted_li[4] )

else:
    result = ( (new_li[2]*4) + (new_li[1]*T) + (new_li[0] * (K-T-4)))

    print(result)
profile
아무띵크 있이

0개의 댓글