-
백준_2116_주사위 쌓기(python)Algorithm/백준_생각정리 2023. 4. 6. 14:39
※ 접근법
주사위 갯수가 최대 만 개였지만 따져야할 주사위 면에 주사위 숫자는 1~6으로 고정돼 있었기 때문에 경위의 수가 많지 않다고 생각해 문제에서 시키는 대로 구현하면 풀릴 것이라고 생각했다.
※ 풀이
(전체적인 관점 : 주사위 윗면 아랫면에 4,5,6이 없다면 옆면으로는 계속 회전시킬 수 있기 때문에 어떻게든 최대인 기둥이 만들어진다. 그렇다면 윗면 아랫면에 6 or 5 or 4가 없는지 확인하고 없다면 elif문으로 걸러서 제일 큰 숫자를 더해준다.
1. 첫 번째 주사위에 윗면을 담당할 숫자는 1~6까지가 있다.
2. 윗면 아랫면에 4,5,6이 없었다면 임의 변수 temp에 6또는 5또는 4를 더해준다.
3. 이것을 마지막 주사위까지 반복해주면 되는 간단한(?) 문제였다.
n = int(input()) data = [] for i in range(n): data.append(list(map(int,input().split()))) dx = [[0,5],[1,3],[2,4]] count = 0 for i in range(6): # 첫 주사위에 윗면이 위를 향하는 숫자의 인덱스 temp = 0 up_idx = i down_idx = 0 for x,y in dx: if up_idx == x or up_idx == y: down_idx = (x+y) - up_idx break if 6 not in [data[0][up_idx],data[0][down_idx]]: temp += 6 elif 5 not in [data[0][up_idx],data[0][down_idx]]: temp += 5 elif 4 not in [data[0][up_idx],data[0][down_idx]]: temp += 4 for j in range(1,n): # 두 번재 주사위부터 끝까지 down_idx = data[j].index(data[j-1][up_idx]) for x,y in dx: if down_idx == x or down_idx == y: up_idx = (x+y) - down_idx break if 6 not in [data[j][up_idx],data[j][down_idx]]: temp += 6 elif 5 not in [data[j][up_idx],data[j][down_idx]]: temp += 5 else: temp += 4 count = max(count, temp) print(count)
※ 회고
할 수 있다.
'Algorithm > 백준_생각정리' 카테고리의 다른 글
백준_11509_풍선 맞추기(python) (0) 2023.04.10 백준_6198_옥상 정원 꾸미기(python) (0) 2023.04.07 백준_5972_택배 배송(python) (0) 2023.04.05 백준_16564_히오스 프로게이머(python) (0) 2023.03.30 백준_17836_공주님을 구해라!(python) (0) 2023.03.20