ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준_15662_톱니바퀴(2)(파이썬)
    Algorithm/백준_생각정리 2023. 2. 1. 15:52

     몇 달전에 톱니바퀴 문제를 풀었었는데 무슨 차이가 있는지 싶었다. 당시 틀린 부분이 없다고 생각하는데 계속 틀려서 헤매다가 겨우 맞췄던 기억이 있다. 톱니바퀴(2)도 똑같이 틀린부분이 없다고 생각이 들었고 2시간 정도를 다시 짜보고, 주석 다 달아보고, 손으로 하나하나 써보고 다 해봤다.  그러다가 헤맨 지점을 발견했는데 생각해보니 톱니바퀴에서도 똑같은 부분으로 헤맸었다.

     

    ※ 헤맸던 지점

    처음에 입력받는 회전시킬 톱니바퀴는 맞닿은 부분들이 서로 같더라도 무조건 회전시켜줘야 한다는 것이다.

     

    from collections import deque
    
    T = int(input())
    data = []
    for _ in range(T):
        data.append(deque(input()))
    K = int(input())
    # 1이 오른쪽 회전(시계방향)-1이 왼쪽으로 회전
    for i in range(K):
        num, dif = map(int,input().split())
        md = dif # 처음 방향을 기억해놓을라고
        num -= 1 # idx는 0부터 시작이니까 1을 빼줌
        mnum = num # 처음 숫자를 기억해놓을라고
        temp = dict() # 매 반복마다 새로운 사전형을 만들 것이다.
        while num > 0: # 자신보다 작은 톱니바퀴에 다가가는 것이다.
            if data[num][6] == data[num-1][2]: # 일단 달라야 회전시키고 뭘 하는데 같아지는 순간 톱니바퀴는 돌아가지 않는다.
                break 
            else: # 맞닿은 톱니바퀴의 번호가 다르다
                # 지금 돌리면 안 된다. 한 번에 돌려야 되는데
                if num not in temp:
                    temp[num] = dif
                if num-1 not in temp:
                    temp[num-1] = -1 * dif
                dif *= -1 # 회전방향은 -1씩 변하니까
                num -= 1 # 전 톱니바퀴로 다가가기 위해서 -1을 해준다.
        dif = md # 처음 방향을 다시 집어넣어준다.
        num = mnum
        while num < T-1:
            if data[num][2] == data[num+1][6]: # 일단 달라야 회전시키고 뭘 하는데 같아지는 순간 톱니바퀴는 돌아가지 않는다.
                break 
            else: # 맞닿은 톱니바퀴의 번호가 다를경우
                if num not in temp:
                    temp[num] = dif
                if (num+1) not in temp:
                    temp[(num+1)] = (-1 * dif)
                num += 1
                dif *= -1
        for j in temp.keys():
            data[j].rotate(temp[j])
        if len(temp.keys()) == 0:
            data[mnum].rotate(md)
    
    count = 0
    
    for i in range(T):
        if data[i][0] == '1':
            count += 1
    
    print(count)

    문제를 꼼꼼히

    'Algorithm > 백준_생각정리' 카테고리의 다른 글

    백준_1461_도서관(python)  (0) 2023.02.20
    백준_7576_토마토(python)  (0) 2023.02.16
    백준_13023_ABCDE(python)  (0) 2023.02.08
    2343_기타레슨_(python)  (0) 2023.01.10
    백준 1261번_알고스팟 (python)  (0) 2022.12.22
Designed by Tistory.