CLOCKSYNC 속도 문제

  • zeroion
    zeroion

    안녕하세요. 늦깍이 프로그래머입니다.
    좋은 사이트 만들어주신 분과 함께하고 계신 분들께 먼저 감사드립니다.

    다름이 아니오라 CLOCKSYNC 문제를 풀고 있는 중인데 속도가 요구사항만큼 안나와서 검토좀 부탁드리고자 합니다. 코드는 아래와 같습니다.

    문제링크: https://algospot.com/judge/problem/read/CLOCKSYNC

    #-*- coding: utf-8 -*-
    
    import sys
    import time
    
    # 스위치들
    switches = [
      [0, 1, 2],
      [3, 7, 9, 11],
      [4, 10, 14, 15],
      [0, 4, 5, 6, 7],
      [6, 7, 8, 10, 12],
      [0, 2, 14, 15],
      [3, 14, 15],
      [4, 5, 7, 14, 15],
      [1, 2, 3, 4, 5],
      [3, 4, 5, 9, 13]
    ]
    
    # 최소클릭수 찾기 재귀함수
    def find_min_combination(switch_idx, clocks, click_cnt):
    
      if switch_idx < 9:
    
        # 같은 스위치를 몇번 누르느냐
        min_click_cnt = sys.maxint
        for click in [0, 1, 2, 3]:
          changed_clocks = clocks[:]
          for val in switches[switch_idx]:
            changed_clocks[val] += click
            if changed_clocks[val] > 4:
              changed_clocks[val] %= 4
    
          click_cnt_returned = find_min_combination(switch_idx+1, changed_clocks, click_cnt + click)
    
          if click_cnt_returned < min_click_cnt:
            min_click_cnt = click_cnt_returned
    
        # start and middle return point
        return min_click_cnt
    
      else:
        # end return point
        if clocks[0] == 4\
            and clocks[1] == 4\
            and clocks[2] == 4\
            and clocks[3] == 4\
            and clocks[4] == 4\
            and clocks[5] == 4\
            and clocks[6] == 4\
            and clocks[7] == 4\
            and clocks[8] == 4\
            and clocks[9] == 4\
            and clocks[10] == 4\
            and clocks[11] == 4\
            and clocks[12] == 4\
            and clocks[13] == 4\
            and clocks[14] == 4\
            and clocks[15] == 4:
          return click_cnt
        else:
          return sys.maxint
    
    
    
    case_length = int(raw_input())
    
    # 테스트
    #case_length = 1
    
    t1 = time.time()
    for case in xrange(case_length):
      clocks = map(lambda x: (int(x)/3) % 4, raw_input().split(' '))
    
      # 테스트 케이스1
      #clocks = map(lambda x: (int(x)/3) % 4, '12 6 6 6 6 6 12 12 12 12 12 12 12 12 12 12'.split(' '))
    
      # 테스트 케이스2
      #clocks = map(lambda x: (int(x)/3), '12 9 3 12 6 6 9 3 12 9 12 9 12 12 6 6'.split(' '))
    
      min_combination = find_min_combination(0, clocks, 0)
    
      # TODO: 못찾았을경우도 있어야함.
      print min_combination
    
    t2 = time.time()
    print "Time:", (t2 - t1)
    

    9년 전
0개의 댓글이 있습니다.
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.