For Programmer
백준 2116번 파이썬 문제풀이(주사위 쌓기) 본문
728x90
이 문제는 브루트 포스라는 힌트를 조금 얻었다. 푸는 방식은 첫번째 주사위의 0~5 번째 인덱스가 각각 젤위로 왔을 때 를 가정하고 총 6번을 반복문을 시작하면 된다. 예를들어 첫번째 주사위의 0번째 인덱스가 맨위로 왔다면 그다음 주사위의 맨 아래 와야하는값은 그 전 주사위의 0번째 인덱스 값이고 젤 위로 올라가야 하는 값은 그와 마주보고 있 는 5번째 인덱스의 값이 젤 위로 올라와야 한다. 이런식으로 조건을 분기 해서 코드를 짜면 쉽게 정답을 찾을 수 있다.
N = int(input())
dice = [list(map(int, input().split())) for _ in range(N)]
new_len = [] # 0~5 인덱스 시작을 기준으로 주사위의 옆면 최고치 합을 모아 놓을 리스트 선언
for i in range(6): # 주사위 하나의 길이 만큼 돈다.
start = i # 시작 값의 인덱스를 start라는 변수에 대입
result = 0 # 결과값을 0으로 초기화
for j in range(len(dice)): # 입력받은 주사위의 길이만큼 돈다.
if start == 0 or start == 5: # 만약 주사위의 인덱스가 0 이나 5라면
result += max(dice[j][1:5]) # 0, 5번을 제외한 나머지 주사위 면중 가장 큰 값을 더해준다
if j != len(dice) - 1 and start == 0: # 만약 인덱스가 마지막이 아니고 0이 라면
start = dice[j + 1].index(dice[j][5]) # 다음 인덱스 값을 현재5번째 인덱스가 존재하는 값을 다음 주사위에서 찾아서 대입
elif j != len(dice) - 1 and start == 5: # 만약 인덱스가 마지막이 아니고 5 라면
start = dice[j + 1].index(dice[j][0]) # 다음 인덱스 값을 현재0번째 인덱스가 존재하는 값을 다음 주사위에서 찾아서 대입
elif start == 2 or start == 4: # 만약 주사위의 인덱스가 2 이나 4라면
result += max(dice[j][0:2] + [dice[j][3]] + [dice[j][5]]) # 2, 4번을 제외한 나머지 주사위 면중 가장 큰 값을 더해준다
if j != len(dice) - 1 and start == 2: # 만약 인덱스가 마지막이 아니고 2이 라면
start = dice[j + 1].index(dice[j][4]) # 다음 인덱스 값을 현재4번째 인덱스가 존재하는 값을 다음 주사위에서 찾아서 대입
elif j != len(dice) - 1 and start == 4: # 만약 인덱스가 마지막이 아니고 4 라면
start = dice[j + 1].index(dice[j][2]) # 다음 인덱스 값을 현재2번째 인덱스가 존재하는 값을 다음 주사위에서 찾아서 대입
elif start == 1 or start == 3: # 만약 주사위의 인덱스가 1 이나 3라면
result += max([dice[j][0]] + [dice[j][2]] + dice[j][4:]) # 1, 3번을 제외한 나머지 주사위 면중 가장 큰 값을 더해준다
if j != len(dice) - 1 and start == 1: # 만약 인덱스가 마지막이 아니고 1이 라면
start = dice[j + 1].index(dice[j][3]) # 다음 인덱스 값을 현재3번째 인덱스가 존재하는 값을 다음 주사위에서 찾아서 대입
elif j != len(dice) - 1 and start == 3: # 만약 인덱스가 마지막이 아니고 3이 라면
start = dice[j + 1].index(dice[j][1]) # 다음 인덱스 값을 현재1번째 인덱스가 존재하는 값을 다음 주사위에서 찾아서 대입
new_len.append(result) # N개의 주사위를 다 돈 N개의 옆면 합을 대입한다.
print(max(new_len)) # 그중 가장 큰 값을 출력
728x90
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
백준 2559번 파이썬 문제풀이(수열) (0) | 2022.01.28 |
---|---|
백준 2304번 파이썬 문제풀이(창고 다각형 - 스택) (0) | 2022.01.27 |
백준 2628번 파이썬 문제풀이(종이 자르기) (0) | 2022.01.26 |
백준 1244번 파이썬 문제풀이(스위치 켜고 끄기) (0) | 2022.01.25 |
백준 2635번 파이썬 문제풀이(수 이어가기) (0) | 2022.01.25 |
Comments