알고리즘

[백준, 파이썬, 1244번] 스위치 켜고 끄기

hminor 2023. 10. 2. 10:35

 

풀이

 

  • 분명 출력은 잘 되는데 4%에서 계속 에러가 발생해서 
  • 이것저것 찾다보니 ...
  • 출력에 20줄이 넘어가게 되면 다음 행에서 출력하도록 적혀있어서
  • 틀리게 되었던 것으로 역시 끝까지 문제를 잘 읽어야겠다는
  • 생각을 다시 하게 되었다는 ...ㅎ
  • 해당 문제의 풀이 과정은 따로 뭐가 없었고
  • 흠.. 남자의 경우엔 switch의 값이 배수인지 체크하기 위해서
  • 범위를 1부터 n까지 체크 후 해당 값이 swich와 나눈 값이 0의 경우 
    • 해당 값에 따른 값 변경해주기
  • 여자의 경우엔 우선 범위가 배열의 길이에 충족하는지 체크 후
    • 값 또한 같다면 변경하기
  • 이후 길이가 20이 넘어가는 범위를 정해둔 다음 그에따른 슬라이싱을 통해 출력하여 해결

 

import sys
input = sys.stdin.readline
n = int(input())
li = list(map(int,input().rstrip('\n').split()))
for _ in range(int(input())):
    gender, switch = map(int,input().split())
    if gender == 1:
        for i in range(1,n+1):
            if not i%switch:
                if li[i-1]: li[i-1] = 0
                else: li[i-1] = 1
    else:
        cnt = 0
        switch -= 1
        while True:
            if 0<=switch-cnt<n and 0<=switch+cnt<n and li[switch-cnt] == li[switch+cnt]:
                if li[switch-cnt]: li[switch-cnt],li[switch+cnt] = 0,0
                else: li[switch-cnt],li[switch+cnt] = 1,1
                cnt += 1
            else: break
for i in range((n//20)+1): print(*li[i*20:(i+1)*20])