시작이 반

[백준] 1244번번 (python 파이썬) 본문

알고리즘/백준

[백준] 1244번번 (python 파이썬)

G_Gi 2021. 3. 29. 19:02
SMALL

구현 문제이다.

 

남자일 경우

받은 숫자의 배수의 스위치를 반전시킨다.

 

여자일 경우

받은 숫자의 대칭되는 스위치를 반전시킨다.

ex) 

번호    1 2 3 4 5 6 7 8

스위치 0 1 0 1 1 1 1 0

일떄

받은 숫자가 6이라면

0 1 0 1 0 0 0 0 이된다.

 

구현은 쉽다.

하지만 출력 형식이 20개씩 잘라서 출력하는 것임을 명심하자!

n = int(input())
switch = list(map(int, input().split(' ')))
students = int(input())
receive_n = [tuple(map(int, input().split(' '))) for _ in range(students)]
# 1: 남, 2: 여

for i in range(students):
    if receive_n[i][0] == 1:  # 남 배수
        c_switch_number = receive_n[i][1]
        j = 1
        n_switch_number = c_switch_number * j
        while n_switch_number <= n:
            switch[n_switch_number - 1] = abs(switch[n_switch_number - 1] - 1)

            j += 1
            n_switch_number = c_switch_number * j

    elif receive_n[i][0] == 2:  # 여 대칭
        switch_number = receive_n[i][1]
        j = 0
        while True:

            if j == 0:
                switch[switch_number - 1] = abs(switch[switch_number - 1] - 1)
            else:
                left = switch_number - 1 - j
                right = switch_number - 1 + j
                if left >= 0 and right < n:
                    if switch[left] == switch[right]:
                        switch[left] = abs(switch[left] - 1)
                        switch[right] = abs(switch[right] - 1)
                    else:
                        break
                else:
                    break
            j += 1

div_twen = 0
for i in range(len(switch) // 20):
    for j in range(20):
        print(switch[j + div_twen], end=' ')
    print()
    div_twen = (i+1) * 20


for i in range(len(switch) % 20):
    print(switch[div_twen + i], end=' ')
LIST