[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.>

์ฒซ๋ฒˆ์งธ ์˜ˆ์ œ ๊ตฌํ˜„ ๋ฉ”๋ชจ๋ฆฌ์ด๋‹ค.

ํ•ญ์ƒ ๋น„์Šทํ•˜๋‹ค.

์ฃผ์–ด์ง„ ๋‹ต๊ณผ ๋‹ค๋ฅธ ์ 
  1. ์Šค์œ„์น˜๋ฅผ ๋ˆ„๋ฅด๋Š” ์ˆœ์„œ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค.

    ๊ณ„์‚ฐํ•ด์•ผ ํ•  ๊ฒƒ์€ ์Šค์œ„์น˜๋ฅผ ๋ช‡ ๋ฒˆ ๋ˆ„๋ฅด๋Š” ๊ฒƒ์ด๋ƒ ์ธ๋ฐ, ๋‚˜๋Š” ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ˆœ์„œ์— ๋„ˆ๋ฌด ์ง‘์ฐฉํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

  2. ๋ฌดํ•œํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์œ ํ•œํ•˜๊ฒŒ ๋งŒ๋“ค์ž.

    ์‹œ๊ณ„๊ฐ€ 12์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋Œ์•„์˜จ๋‹ค๋Š” ์ ์„ ์ด์šฉํ•ด์„œ ์–ด๋–ค ์Šค์œ„์น˜๊ฑด ์ตœ๋Œ€ 3๋ฒˆ ์ด์ƒ ๋ˆ„๋ฅด์ง€ ์•Š๊ฒŒ ํ•˜์ž.

    ์ •๋ง ์ƒ๊ฐ์ง€๋„ ๋ชปํ–ˆ๋˜ ๊ฐ€์ •

    ์ „์ฒด ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ 4(0~3๋ฒˆ)์˜ 10์Šน๋ฐ–์— ์•ˆ๋จ

  3. return ๋ฐฉ์‹

    ๊ณ„์† ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฒƒ ์ค‘์— ํ•˜๋‚˜์ธ๋ฐ, ์ฃผ์–ด์ง„ ๋‹ต์—์„œ๋Š” 10๋ฒˆ์งธ ์Šค์œ„์น˜์— ๋‹ฟ์„ ๋•Œ๋ฅผ ๊ธฐ์ ์œผ๋กœ ํ•˜์—ฌ ์ •๋ ฌ์ด ๋˜์—ˆ์œผ๋ฉด 0์„ returnํ•˜๊ฒŒ ํ•ด์„œ solve ํ•จ์ˆ˜์˜ return์„ ํƒ€๊ณ  ret์„ ์ฐจ๋ก€๋กœ ๊ฑฐ์ณ ๋งˆ์ง€๋ง‰์— ret์œผ๋กœ return ๋˜๊ฒŒ ํ•˜์˜€๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ๊ฒฐ๊ตญ ์• ์ดˆ์— 4๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์™„์ „ ํƒ์ƒ‰ํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๊ณ , ์žˆ์—ˆ์–ด๋„ ๊ตฌํ˜„์„ ์ƒ๊ฐํ•˜๊ธด ์–ด๋ ค์› ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. (์ž˜ ์ตํ˜€๋‘์ž!)

๋งˆ์ง€๋ง‰ ๊ฒฝ์šฐ์˜ ์ˆ˜ ๋”ฐ์งˆ ๋•Œ return ๊ฐ’์„ ์ด์šฉํ•ด return ๊ฐ’์„ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค๊ธฐ

๋ฐ˜์‘ํ˜•