[python] μκ³ λ¦¬μ¦ λ¬Έμ ν΄κ²° μ λ΅ 1κΆ :: μκ³ λ§μΆκΈ° (p168) λ¬Έμ
6.8 λ¬Έμ : μκ³ λ§μΆκΈ° (λ¬Έμ ID: CLOCKSYNC, λμ΄λ: μ€)
λ¬Έμ
4x4 격μ ννλ‘ λ°°μΉλ μ΄μ¬μ― κ°μ μκ³κ° μμ΅λλ€. μ΄ μκ³λ€μ λͺ¨λ 12μ, 3μ, 6μ, νΉμ 9μλ₯Ό κ°λ¦¬ν€κ³ μλλ°, μ΄ μκ³λ€μ΄ λͺ¨λ 12μλ₯Ό κ°λ¦¬ν€λλ‘ λ°κΎΈκ³ μΆμ΅λλ€. μκ³μ μκ°μ μ‘°μνλ μ μΌν λ°©λ²μ μ΄ κ°μ μ€μμΉλ€μ μ‘°μνλ κ²μΌλ‘, κ° μ€μμΉλ€μ λͺ¨λ μ κ²λ μΈ κ°μμ λ§κ²λ λ€μ― κ°μ μκ³μ μ°κ²°λμ΄ μμ΅λλ€. ν μ€μμΉλ₯Ό λλ₯Ό λλ§λ€, ν΄λΉ μ€μμΉμ μ°κ²°λ μκ³λ€μ μκ°μ 3μκ°μ© μμΌλ‘ μμ§μ λλ€. (12μμΌλλ 3μλ‘, 3μ=>6μ, 6μ =>9μ, 9μ=>12μ)
μ€μμΉλ€κ³Ό κ·Έλ€μ΄ μ°κ²°λ μκ³λ€μ λͺ©λ‘μ΄ μ£Όμ΄μ§κ³ νμ¬ κ°λ¦¬ν€λ μκ°λ€μ΄ μ£Όμ΄μ‘μ λ λͺ¨λ μκ³λ₯Ό 12μλ‘ λ리기 μν΄ μ΅μν μ€μμΉλ₯Ό λͺ λ²μ΄λ λλ¬μΌ νλμ§ κ³μ°νλ νλ‘κ·Έλ¨μ μμ±νμΈμ.
μκ° λ° λ©λͺ¨λ¦¬ μ ν
νλ‘κ·Έλ¨μ 10μ΄ μμ μ€νλμ΄μΌ νλ©°, 64MB μ΄νμ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©ν΄μΌ ν©λλ€.
μ λ ₯
첫 μ€μ ν μ€νΈ μΌμ΄μ€μ κ°μ C(C<=30)κ° μ£Όμ΄μ§λλ€. κ° ν μ€νΈ μΌμ΄μ€λ ν μ€μ 16κ°μ μ μλ‘ μ£Όμ΄μ§λ©°, κ° μ μλ 0λΆν° 15κΉμ§ κ° μκ³κ° κ°λ¦¬ν€κ³ μλ μκ°μ 12,3,6,9 μ€ νλλ‘ ννν©λλ€.
μΆλ ₯
κ° ν μ€νΈ μΌμ΄μ€λΉ μ μ νλλ₯Ό ν μ€μ μΆλ ₯ν©λλ€. μ΄ μ μλ μκ³λ€μ λͺ¨λ 12μλ‘ λλ €λκΈ° μν΄ μ€μμΉλ₯Ό λλ¬μΌ ν μ΅μ νμμ¬μΌ νλ©°, λ§μ½ μ΄κ²μ΄ λΆκ°λ₯ν κ²½μ° -1μ μΆλ ₯ν΄μΌ ν©λλ€.
μ€μμΉ λ²νΈ | μ°κ²°λ μκ³λ€ | μ€μμΉ λ²νΈ | μ°κ²°λ μκ³λ€ |
---|---|---|---|
0 | 0,1,2 | 5 | 0,2,14,15 |
1 | 3,7,9,11 | 6 | 3,14,15 |
2 | 4,10,14,15 | 7 | 4,5,7,14,15 |
3 | 0,4,5,6,7 | 8 | 1,2,3,4,5 |
4 | 6,7,8,10,12 | 9 | 3,4,5,9,13 |
λμ λ΅
import sys
c = int(input()) # testcase
switch_list=[[0,1,2],[0,2,14,15],[0,4,5,6,7],[1,2,3,4,5],[3,4,5,9,13],[3,7,9,11],[3,14,15],[4,5,7,14,15],[4,10,14,15],[6,7,8,10,12]]
def click_switch(index,time_list,type):
tmp_list = switch_list[index]
for i in tmp_list:
time_list[i]+=3*type
if time_list[i]>12:
time_list[i] -=12
if time_list[i]<0:
time_list[i]+=12
return time_list
def SwitchNum(time_list,sum_click,min_click):
clock_index= int(-1)
for clock in time_list: # 12μκ° μλ 첫 μκ³ μ°ΎκΈ°
if clock!=12:
clock_index = time_list.index(clock)
break
if clock_index == -1: # λͺ¨λ 12μλΌλ©΄
return sum_click
if sum_click > min_click: # μ§κΈκΉμ§ λμ¨ μ΅μ νμλ₯Ό μ΄κ³ΌνμΌλ©΄
return min_click
tmp_switches = list()
save_switches = list()
for index in range(0,len(switch_list)):
if clock_index in switch_list[index]:
tmp = switch_list[index].index(clock_index)
store_index = len(tmp_switches)
for i in range(0,len(tmp_switches)):
if tmp<tmp_switches[i][1]:
store_index = i
tmp_switches.insert(store_index,[index,tmp])
for i in tmp_switches:
save_switches.append(i[0])
for index in save_switches:
time_list = click_switch(index,time_list,1)
sum_click+=1
net = SwitchNum(time_list,sum_click,min_click)
time_list = click_switch(index,time_list,-1)
sum_click-=1
if net<min_click:
min_click = net
return min_click
for case in range(0,c):
clock_time = list()
try:
clock_time=input().split()
except:
print("clock time input error")
#sys.exit()
for i in range(0,16):
clock_time[i] = int(clock_time[i])
click_num = int(0)
result = list()
result.append(SwitchNum(clock_time,click_num,987654321))
for i in result:
print(i)
μ€λͺ
μ²μμ νλμ μ‘°κ°μ μ€μμΉ νλ λλ₯΄κΈ°λΌκ³ λ³΄κ³ ν¨μλ₯Ό ꡬννλ€. μ± μμ μ£Όμ΄μ§ μ€μμΉμ μμλ₯Ό κ·Έλλ‘ νμ¬ 12μκ° μλ 첫λ²μ§Έ μκ³λ₯Ό μ°Ύμ, ν΄λΉ μκ³λ₯Ό ν¬ν¨νκ³ μλ μ€μμΉλ₯Ό λ°°μ΄μ λ΄μ ν λ°°μ΄μμ νλμ© κΊΌλ΄λ©΄μ μ¬κ·μ μΌλ‘ μ²λ¦¬νλ €κ³ νμλ€.
μ΄μ κ°μ λ°©λ²μΌλ‘ ꡬνμ νμ λ 첫λ²μ§Έ μμ λΆν° 무ν μ¬κ·ν¨μμ λ€μ΄κ°μ μ€λ²νλ‘μ° μλ¬κ° λ¬λ€. λ°λΌμ μ£Όμ΄μ§ μ€μμΉ μμλλ‘ κ³ λ €νλ κ²μ΄ μλλΌ, μ€μμΉλ₯Ό κ³ λ €νλ μμλ₯Ό λ°κΏλ³΄μλ μκ°μ μ€μμΉλ₯Ό index μμλλ‘ λ°°μ΄μ λ£μ΄λ³΄μλ€. μ¬κΈ°μ index μμ΄λ 12μκ° μλ 첫λ²μ§Έ μκ° ν΄λΉ λ°°μ΄μ λ€μ΄μλ μμΉμ΄λ€.
ex_) 12 6 6 6 6 .... μμ 12μκ° μλ 첫λ²μ§Έ μλ 2λ²μ§Έ μκ³μ μλ 6μμ΄λ€. 2λ²μ§Έ μκ³(index:1)μ μ°κ²°λ μ€μμΉλ 0,8μ΄ μλλ° 0μμμ 1μ indexλ 1μ΄κ³ 8μμμ 1μ indexλ 0μ΄λ―λ‘ 8λ²μ§Έ λ²νΌμ λ μ°μ μ μΌλ‘ λλ¬λ³Έλ€.
μ΄λ κ² κ΅¬νν μ΄μ λ 12 6 6 6 6 ... μ΄λΌλ μμ μμ μ€λ²νλ‘μ°κ° λ¬ μ΄μ κ° 8λ² μ€μμΉλ³΄λ€ 0λ² μ€μμΉλ₯Ό μ°μ νμκΈ° λλ¬Έμ 0λ² μ€μμΉλ₯Ό κ³ λ €νλ κ³Όμ μμ 무ν μ¬κ·μ λΉ μ Έμ λΌκ³ μκ°νκΈ° λλ¬Έμ΄λ€.
μ΄λ κ²κΉμ§ ꡬννμΌλ 첫λ²μ§Έ λ¬Έμ λ ν΄κ²°νμμ§λ§, λλ²μ§Έ λ¬Έμ λ μμ μ€λ²νλ‘μ°λλ¬Έμ ν΄κ²°νμ§ λͺ»νμλ€. κ·Έλμ μ€κ°μ
if sum_click > min_click: # μ§κΈκΉμ§ λμ¨ μ΅μ νμλ₯Ό μ΄κ³ΌνμΌλ©΄
return min_click
λΌλ μ½λλ₯Ό μΆκ°νμ¬ μ΄λκΉμ§ 12μλ₯Ό λ§μΆ μ μλ μ΅μμ μ€μμΉ μλ₯Ό μ°Ύμλ€λ©΄, κ·Έ μ€μμΉ μλ³΄λ€ λμ΄κ°λ κ²½μ°λ κ³ λ €νμ§ μκΈ°λ‘ νμλ€. νμ§λ§ μ΄ λλ μ²μκ³Ό λ§μ°¬κ°μ§λ‘ μλͺ»λ κΈΈμ λ€μ΄μλ©΄ 무ν μ¬κ·λ₯Ό λ°μμν¬ μ μμΌλ―λ‘ λͺ¨λ μν©μ μμ΄μ ν΄κ²°λ°©μμ μλμλ€.
λ λ€μ μκ°ν΄λ³Έ λ°©μμ κ³μν΄μ 12μκ° μλ 첫λ²μ§Έ μκ³λ₯Ό 찾기보λ€λ 1λ²μ§Έ μκ³λΆν° 16λ²μ§Έ μκ³κΉμ§ μ°¨λ‘λλ‘ μ§ννλ©΄μ 12μκ° μλ μκ³λ₯Ό λ°κΎΈλ λ°©μμ΄λ€. νμ§λ§ μ΄μ κ°μ λ°©μμ΄ μκ°, 곡κ°μ μΈ λ¬Έμ λ₯Ό μ€μ¬μ€ κ²μ΄λΌκ³ μκ°μ§ μλλ€..
λ©λͺ¨λ¦¬
Partition of a set of 140558 objects. Total size = 10299088 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 45997 33 3304117 32 3304117 32 str
1 34805 25 1467044 14 4771161 46 tuple
2 17279 12 1025087 10 5796248 56 bytes
3 8666 6 730012 7 6526260 63 types.CodeType
4 1395 1 670536 7 7196796 70 type
5 8043 6 579096 6 7775892 76 function
6 2115 2 505916 5 8281808 80 dict (no owner)
7 1395 1 405012 4 8686820 84 dict of type
8 361 0 291340 3 8978160 87 dict of module
9 367 0 150860 1 9129020 89 set
<381 more rows. Type e.g. '_.more' to view.>
첫λ²μ§Έ μμ ꡬν λ©λͺ¨λ¦¬μ΄λ€.
νμ λΉμ·νλ€.
μ£Όμ΄μ§ λ΅κ³Ό λ€λ₯Έ μ
-
μ€μμΉλ₯Ό λλ₯΄λ μμλ μ€μνμ§ μλ€.
κ³μ°ν΄μΌ ν κ²μ μ€μμΉλ₯Ό λͺ λ² λλ₯΄λ κ²μ΄λ μΈλ°, λλ μ€λ²νλ‘μ°λ₯Ό νΌνκΈ° μν΄ μμμ λ무 μ§μ°©νλ κ² κ°λ€.
-
무νν κ²½μ°μ μλ₯Ό μ ννκ² λ§λ€μ.
μκ³κ° 12μκ°μ΄ μ§λλ©΄ λμμ¨λ€λ μ μ μ΄μ©ν΄μ μ΄λ€ μ€μμΉκ±΄ μ΅λ 3λ² μ΄μ λλ₯΄μ§ μκ² νμ.
μ λ§ μκ°μ§λ λͺ»νλ κ°μ
μ 체 κ²½μ°μ μκ° 4(0~3λ²)μ 10μΉλ°μ μλ¨
-
return λ°©μ
κ³μ ν·κ°λ¦¬λ κ² μ€μ νλμΈλ°, μ£Όμ΄μ§ λ΅μμλ 10λ²μ§Έ μ€μμΉμ λΏμ λλ₯Ό κΈ°μ μΌλ‘ νμ¬ μ λ ¬μ΄ λμμΌλ©΄ 0μ returnνκ² ν΄μ solve ν¨μμ returnμ νκ³ retμ μ°¨λ‘λ‘ κ±°μ³ λ§μ§λ§μ retμΌλ‘ return λκ² νμλ€. μ΄λ¬ν λ°©μμ κ²°κ΅ μ μ΄μ 4κ°μ§ κ²½μ°μ μλ₯Ό μμ νμνλ€λ μμ΄λμ΄κ° μμ΄μΌ νκ³ , μμμ΄λ ꡬνμ μκ°νκΈ΄ μ΄λ €μ λ κ² κ°λ€. (μ μ΅νλμ!)
λ§μ§λ§ κ²½μ°μ μ λ°μ§ λ return κ°μ μ΄μ©ν΄ return κ°μ κ±°μ¬λ¬ μ¬λΌμ¬ μ μκ² λ§λ€κΈ°