백준 15662 톱니바퀴(2)

gmlwlswldbs·2021년 9월 20일
0

코딩테스트

목록 보기
30/130
t = int(input())
g = [list(input()) for _ in range(t)]
def rotate1(num, dirt):
    num -= 1
    d = [0] * t
    d[num] = dirt
    i = num
    while i > 0:
        if g[i][6] == g[i-1][2]:
            d[i-1] = 0
            break
        else:
            d[i-1] = d[i] * (-1)
            i-= 1
    j = num
    while j < t-1:
        if g[j][2] == g[j+1][6]:
            d[j+1] = 0
            break
        else:
            d[j+1] = d[j] * (-1)
            j += 1
    return d
    
def rotate2(d, g):
    for i in range(t):
        tmp = g[i]
        if d[i] == 0:
            continue
        for j in range(8):
            g[i][j] = tmp[(j - d[i]) % 8]
    return g
        
    
k = int(input())
for _ in range(k):
    num, dirt = map(int, input().split())
    d = rotate1(num, dirt)
    g = rotate2(d, g)

cnt = 0
for i in range(t):
    if g[i][0] == '1':
        cnt += 1
print(cnt)

이거.., 진짜 왜 틀림...?

t = int(input())
g = [list(input()) for _ in range(t)]
def rotate1(num, dirt):
    num -= 1
    d = [0] * t
    d[num] = dirt
    u = num
    while u > 0:
        if g[u][6] == g[u-1][2]:
            d[u-1] = 0
            break
        else:
            d[u-1] = d[u] * (-1)
            u-= 1
    v = num
    while v < t-1:
        if g[v][2] == g[v+1][6]:
            d[v+1] = 0
            break
        else:
            d[v+1] = d[v] * (-1)
            v += 1
    return d
    
def rotate2(d, g):
    for i in range(t):
        if d[i] == 0:
            continue
        if d[i] == 1:
            tmp = g[i][7]
            for j in range(7):
                g[i][j+1] = g[i][j]
            g[i][0] = tmp
        if d[i] == -1:
            tmp = g[i][0]
            for j in range(1, 8):
                g[i][j-1] = g[i][j]
            g[i][7] = tmp
    return g
        
    
k = int(input())
for _ in range(k):
    num, dirt = map(int, input().split())
    d = rotate1(num, dirt)
    g = rotate2(d, g)

cnt = 0
for i in range(t):
    if g[i][0] == '1': 
        cnt += 1
print(cnt)

진ㅉㅏ 왜...?

t = int(input())
g = [list(input()) for _ in range(t)]
def rotate1(num, drt):
    num -= 1
    d = [0] * t
    d[num] = drt
    u = num
    while u > 0:
        if g[u][6] == g[u-1][2]:
            d[u-1] = 0
            break
        else:
            d[u-1] = d[u] * (-1)
            u-= 1
    v = num
    while v < t-1:
        if g[v][2] == g[v+1][6]:
            d[v+1] = 0
            break
        else:
            d[v+1] = d[v] * (-1)
            v += 1
    return d
    
def rotate2(d, g):
    for i in range(t):
        if d[i] == 0:
            continue
        if d[i] == 1:
            tmp = g[i][7]
            for j in range(7, 0, -1):
                g[i][j] = g[i][j-1]
            g[i][0] = tmp
        if d[i] == -1:
            tmp = g[i][0]
            for j in range(0, 7):
                g[i][j] = g[i][j+1]
            g[i][7] = tmp
    return g
        
    
k = int(input())
for _ in range(k):
    num, drt = map(int, input().split())
    d = rotate1(num, drt)
    g = rotate2(d, g)

cnt = 0
for i in range(t):
    if g[i][0] == '1':
        cnt += 1
print(cnt)

결국 풀긴 함.
각 톱니의 방향을 먼저 구하고 -> 각 행마다 방향대로 돌린다

0개의 댓글