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 ๊ฐ์ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ์ฌ ์ ์๊ฒ ๋ง๋ค๊ธฐ
Comment