알고리즘 공부/백준

(Python)백준 코딩테스트 연습 - 스위치 켜고 끄기(1244)

HRuler 2023. 1. 19. 00:53

1. 문제

https://www.acmicpc.net/problem/1244

 

1244번: 스위치 켜고 끄기

첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩

www.acmicpc.net

2. 풀이

import sys
input = sys.stdin.readline

# n : 스위치 개수
n = int(input())

# n_l : 스위치 배열
n_l = list(map(int, input().split()))

# p_cnt : 사람 수
p_cnt = int(input())

for i in range(p_cnt):
    # print(n_l)
    s, s_num = map(int, input().split())
    if s == 1:
        c_num = [s_num * (j + 1) for j in range(n//s_num)]
        # print(c_num)
        for j in c_num:
            if n_l[j - 1] == 0:
                n_l[j - 1] = 1
            elif n_l[j - 1] == 1:
                n_l[j - 1] = 0
    elif s == 2:
        s_num -= 1
        c_num = [s_num]
        be_s = s_num - 1
        af_s = s_num + 1
        while True:
            if be_s < 0 or af_s >= n or n_l[be_s] != n_l[af_s]:
                break
            c_num.append(be_s)
            c_num.append(af_s)
            be_s -= 1
            af_s += 1
        # print(c_num)
        for j in c_num:
            if n_l[j] == 0:
                n_l[j] = 1
            elif n_l[j] == 1:
                n_l[j] = 0
result = ""
output = True
for i, k in enumerate(n_l):
    output = True
    result += "{} ".format(k)
    if (i + 1) % 20 == 0:
        print(result.strip())
        result = ""
        output = False
if output:
    print(result.strip())

3. 후기

 - 문제는 복잡한 프로세스를 구현하는 종류로 문제에 나와있는 설명대로 구현하였으며, 다만 출력과정에서 문제에 나와있는 출력시 한 줄에 20개씩 출력하라는 참고 사항을 못보아서 한참 헤맸다.