βοΈ λ¬Έμ
[λ°±μ€/BOJ] 2116λ²: μ£Όμ¬μ μκΈ°(https://www.acmicpc.net/problem/2116)
μ²μλ μ¬λ¬ μ’ λ₯μ μ£Όμ¬μλ₯Ό κ°μ§κ³ μκΈ° λμ΄λ₯Ό νκ³ μλ€. μ£Όμ¬μμ λͺ¨μμ λͺ¨λ ν¬κΈ°κ° κ°μ μ μ‘면체μ΄λ©° κ° λ©΄μλ 1λΆν° 6κΉμ§μ μ«μκ° νλμ© μ νμλ€. κ·Έλ¬λ λ³΄ν΅ μ£Όμ¬μμ²λΌ λ§μ£Ό 보λ λ©΄μ μ νμ§ μ«μμ ν©μ΄ λ°λμ 7μ΄ λλ κ²μ μλλ€.
μ£Όμ¬μ μκΈ° λμ΄λ μλμμλΆν° 1λ² μ£Όμ¬μ, 2λ² μ£Όμ¬μ, 3λ² μ£Όμ¬μ, … μ μμλ‘ μλ κ²μ΄λ€. μμ λ λ€μκ³Ό κ°μ κ·μΉμ μ§μΌμΌ νλ€: μλ‘ λΆμ΄ μλ λ κ°μ μ£Όμ¬μμμ μλμ μλ μ£Όμ¬μμ μλ©΄μ μ νμλ μ«μλ μμ μλ μ£Όμ¬μμ μλ«λ©΄μ μ νμλ μ«μμ κ°μμΌ νλ€. λ€μ λ§ν΄μ, 1λ² μ£Όμ¬μ μλ©΄μ μ«μλ 2λ² μ£Όμ¬μ μλ«λ©΄μ μ«μμ κ°κ³ , 2λ² μ£Όμ¬μ μλ©΄μ μ«μλ 3λ² μ£Όμ¬μ μλ«λ©΄μ μ«μμ κ°μμΌ νλ€. λ¨, 1λ² μ£Όμ¬μλ λ§μλλ‘ λμ μ μλ€.
μ΄λ κ² μμ λμΌλ©΄ κΈ΄ μ¬κ° κΈ°λ₯μ΄ λλ€. μ΄ μ¬κ° κΈ°λ₯μλ 4κ°μ κΈ΄ μλ©΄μ΄ μλ€. μ΄ 4κ°μ μλ©΄ μ€μμ μ΄λ ν λ©΄μ μ«μμ ν©μ΄ μ΅λκ° λλλ‘ μ£Όμ¬μλ₯Ό μκ³ μ νλ€. μ΄λ κ² νκΈ° μνμ¬ κ° μ£Όμ¬μλ₯Ό μ μλλ₯Ό κ³ μ ν μ± μμΌλ‘ 90λ, 180λ, λλ 270λ λ릴 μ μλ€. ν μλ©΄μ μ«μμ ν©μ μ΅λκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
π€ μ μΆλ ₯ μμ
π§ λμ΄λ/μμ μκ°
β λμ΄λ: solved.ac κΈ°μ€ G5
β μμ μκ°: 1μκ° 30λΆ μ΄κ³Ό
β κΆμ₯ μκ°: 1μκ° 30λΆ
π‘ νμ΄
1) λ¬Έμ μ΄ν΄
μ¬λ¬ κ°μ μ£Όμ¬μλ₯Ό μμμ μλ©΄μ μ ν μ«μμ ν© μ€ μ΅λκ°μ ꡬνλ λ¬Έμ λ€. λ€ μλ©΄μ ν©μ λ€ κ΅¬ν νμλ μκ³ λ€ λ©΄ μ€ κ°μ₯ ν° κ°μ κΈ°μ€μΌλ‘ 맀 μ£Όμ¬μλ§λ€ μλ©΄ μ€ μ΅λκ°μ λμ μΌλ‘ λν΄μ£Όλ©΄ λλ€.
λ¬Έμ μμ '1λ² μ£Όμ¬μλ λ§μλλ‘ λμ μ μλ€'λ 쑰건μ 쀬λλ° μ΄κ±Έ μ νμ©ν΄μΌ νλ€.
2) μμ΄λμ΄ νλ¦ λ° μ½λ
β μ§ μΈλ±μ€ 리μ€νΈ μ μ
pair_idx = [5, 3, 4, 1, 2, 0]
- μ£Όμ¬μλ₯Ό μ΄λ£¨λ κ°μ΄ μ λ ₯λλ μμλ μ κ°λλ₯Ό κΈ°μ€μΌλ‘ A, B, C, D, E, Fμ΄κ³ κ° λ©΄μ A-F / B-D / C-Eλ‘ μ§μ§μ΄μ§λ€.
- A~Fμ ν΄λΉνλ κ°μ μΈλ±μ€λ 0~5μ΄λ€.
- pair_idx[i] = iλ²μ§Έ λ©΄κ³Ό λ§μ£Όλ³΄λ λ©΄
- i=0μ Aλ©΄μ μλ―Ένκ³ pair_idx[0]μ Aλ©΄κ³Ό λ§μ£Όλ³΄λ Fλ©΄μ μΈλ±μ€ κ°μ΄λ€.
β‘ 1λ² μ£Όμ¬μ λ°°μΉνκΈ°
for i in range(6):
top, bottom = dice_list[0][pair_idx[i]], dice_list[0][i]
# 1λ² μ£Όμ¬μ μλ©΄ μ΅λκ°
max_side = max([num for num in dice_list[0] if num not in (top, bottom)])
temp = max_side
prev_top = top
- for i in range(6)
- 1λ² μ£Όμ¬μλ λ§μλλ‘ λμ μ μλ€κ³ νκΈ° λλ¬Έμ 6λ©΄ λͺ¨λ λ°λ₯μ λΏλλ‘ λ μ μλ€.
- λ°λ₯μ λΏμ λ©΄μ΄ λ°λ λλ§λ€ μμ μ£Όμ¬μ μλ©΄μ ν© μ€ μ΅λλ₯Ό μ°Ύλ κ³Όμ μ λ°λ³΅ν΄μΌ νλ€.
- top, bottom = dice_list[0][pair_idx[i]], dice_list[0][i]
- 1λ² μ£Όμ¬μμ μλ©΄κ³Ό λ°λ©΄μ λ°κΏ κ°λ©΄μ λ°°μΉνλ κ³Όμ μ μ²λ¦¬νλ μ½λλ€.
- max_side = max([num for num in dice_list[0] if num not in (top, bottom)])
- μλ©΄κ³Ό μλ«λ©΄μ΄ μ ν΄μ§λ©΄ μλ©΄λ μμ°μ€λ½κ² μ ν΄μ§κ² λλ€.
- 1)μμλ μΈκΈνλ―μ΄ μλ©΄ κ° μ€ μ΅λκ°μλ§ κ΄μ¬μ΄ μκΈ° λλ¬Έμ max()λ₯Ό νμ©νλ€.
- temp = max_side / prev_top = top
- temp = max_side: 1λ² μ£Όμ¬μ λ°°μΉκ° λ°λ λλ§λ€ κ° μ£Όμ¬μμ μλ©΄ μ΅λκ°μ λν΄μ£ΌκΈ° μν λ³μλ‘ μ΄κΈ°κ°μ 1λ² μ£Όμ¬μμ μλ©΄ μ€ μ΅λκ°μ΄λ€.
- prev_top = top: iλ²μ§Έ μ£Όμ¬μμ μλ©΄μ μ ν μ«μμ i+1λ²μ§Έ μ£Όμ¬μμ λ°λ©΄μ μ ν μ«μκ° κ°μμΌ νλ 쑰건μ μ²λ¦¬νκΈ° μν΄ μ΄μ μ£Όμ¬μμ μλ©΄ κ° μ μ₯ λͺ©μ μΌλ‘ μ¬μ©ν λ³μλ€.
β’ 2λ² μ£Όμ¬μλΆν° μκΈ°
for j in range(1, len(dice_list)):
current_bottom_idx = dice_list[j].index(prev_top)
current_top = dice_list[j][pair_idx[current_bottom_idx]]
temp += max([num for num in dice_list[j] if num not in (current_top, dice_list[j][current_bottom_idx])])
prev_top = current_top
- for j in range(1, len(dice_list)
- 2λ² μ£Όμ¬μλΆν° μμμ£Όλ κ³Όμ μ΄λ€.
- current_bottom_idx = dice_list[j].index(prev_top)
- iλ²μ§Έ μ£Όμ¬μμ λ°λ©΄μ μ ν μ«μμ μ΄μ μμ μ¬λ €μΌ νλ i+1λ²μ§Έ μ£Όμ¬μμ μλ©΄μ μ ν μ«μκ° κ°μμΌ νκΈ° λλ¬Έμ μ΄μ μ κΈ°λ‘ν΄λμλ prev_top κ°μ μ΄μ©ν΄ A~Fλ©΄ μ€ μ΄λ€ λ©΄μ΄ λ°μΌλ‘ μμΌ νλμ§ νμΈνλ€.
- current_top = dict_list[j][pair_idx[current_bottom_idx]]
- νμ¬ λ°λ©΄κ³Ό λ§μ£Όλ³΄λ λ©΄μ μ°ΎκΈ° μν λΆλΆμΌλ‘, 1λ² μ£Όμ¬μμμ μ¬μ©ν λ‘μ§κ³Ό λμΌνλ€.
- prev_top = current_top
- ν μ£Όμ¬μλ₯Ό μκ³ λλ©΄ μλ©΄μ κ°μ κ°μ₯ μ΅κ·Ό μ£Όμ¬μμ μλ©΄ κ°μΌλ‘ κ°±μ ν΄μ€λ€.
- μ΄ κ°μ κΈ°μ€μΌλ‘ λ€μ μ£Όμ¬μκ° μμμ ΈμΌ νλ€.
3) μ 체 μ½λ
import sys
input = sys.stdin.readline
N = int(input())
dice_list = [list(map(int, input().split())) for _ in range(N)]
answer = 0
pair_idx = [5, 3, 4, 1, 2, 0]
for i in range(6):
top, bottom = dice_list[0][pair_idx[i]], dice_list[0][i]
# 1λ² μ£Όμ¬μ μλ©΄ μ΅λκ°
max_side = max([num for num in dice_list[0] if num not in (top, bottom)])
temp = max_side
prev_top = top
# 2λ² μ£Όμ¬μλΆν° μκΈ°
for j in range(1, len(dice_list)):
current_bottom_idx = dice_list[j].index(prev_top)
current_top = dice_list[j][pair_idx[current_bottom_idx]]
temp += max([num for num in dice_list[j] if num not in (current_top, dice_list[j][current_bottom_idx])])
prev_top = current_top
answer = max(answer, temp)
print(answer)
4) μ΄λ €μ λ μ /λ°°μ΄ μ
π¨ μ΄λ €μ λ μ
- μ²μμλ λ¬Έμ μ μ£Όμ΄μ§ κ·Έλ¦Όλ§ λ³΄κ³ Aκ° λ¬΄μ‘°κ±΄ μλ©΄, Fκ° λ¬΄μ‘°κ±΄ λ°λ©΄μ΄λΌκ³ μκ°ν΄μ ꡬν λ°©λ²μ λ μ¬λ¦¬λ λ°μ μ΄λ €μμ΄ μμλ€.
β λ°°μ΄ μ
- μ΄λ €μ보μ΄λ λ¬Έμ λΌκ³ κ²λ¨Ήμ§ λ§κ³ λ‘μ§μ μ μΈμ°μ. λ‘μ§λ§ κΉλνκ² λμ€λ©΄ κ·Έλλ‘ κ΅¬ννκΈ°λ§ νλ©΄ λ¨ π€
'Problem Solving > [νν΄99] TIL' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
99ν΄λ½ μ½ν μ€ν°λ 27μΌμ°¨ TIL / DP(λ€μ΄λλ―Ή νλ‘κ·Έλλ°) (0) | 2024.11.23 |
---|---|
99ν΄λ½ μ½ν μ€ν°λ 26μΌμ°¨ TIL / μν&DP(λ€μ΄λλ―Ή νλ‘κ·Έλλ°) (0) | 2024.11.22 |
99ν΄λ½ μ½ν μ€ν°λ 24μΌμ°¨ TIL / μμ νμ (0) | 2024.11.20 |
99ν΄λ½ μ½ν μ€ν°λ 23μΌμ°¨ TIL / μμ νμ (0) | 2024.11.19 |
99ν΄λ½ μ½ν μ€ν°λ 22μΌμ°¨ TIL / μμ νμ (1) | 2024.11.18 |