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

 

1244번: 스위치 켜고 끄기

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

www.acmicpc.net

 

문제에서 생각해봐야할 것은 '스위치를 중심으로 좌우가 대칭이면서 가장 많은 스위치를 포함하는 구간을 찾아서, 그 구간에 속한 스위치의 상태를 모두 바꾼다.' 는 것이다.

 

스위치의 길이를 반으로 나눈 후, 그 길이만큼 다 비교하는 방법을 택했다.

N=int(input())
btn=[-1] + list(map(int,input().split()))
student_num = int(input())

def switch(num):
    if(btn[num]==0):
        btn[num]=1
    else:
        btn[num]=0
    return

for _ in range(student_num):
    sex, num = map(int,input().split())

    if(sex==1):
        for i in range(num, N+1, num):
            switch(i)
    else:
        switch(num)
        for j in range(N//2):
            if num+j > N or num-j < 1: break
            if btn[num+j] == btn[num-j]:
                switch(num+j)
                switch(num-j)
            else:
                break


for i in range(1,N+1):
    print(btn[i], end=' ')
    if i%20 == 0: print()

 

+ Recent posts