티스토리 뷰

 

🚀접근하기

문제 설명이 길어서 읽고 이해하는데 시간이 좀 걸렸던 문제. 그러나 그냥 설명해주는대로 조건을 나눠 작성해주면 되는 문제였다.

🎉코드

import sys

n=int(sys.stdin.readline())

switch = list(map(int , sys.stdin.readline().split(" ")))

stu = int(sys.stdin.readline())

for i in range(stu):
    n1, n2 = map(int,sys.stdin.readline().split(" "))
    
    if n1 == 1:
        for i in range(n2, n+1, n2):
            switch[i-1] = switch[i-1]^1

    elif n1 == 2:
        cnt = 1

        while True:
            m1 = n2 - cnt
            m2 = n2 + cnt
            if m1 > 0 and m2 <= n:
                if switch[m1-1] == switch[m2-1]:
                    cnt+=1
                    continue
                else:
                    break
            else:
                break

        for i in range(m1+1, m2):
            switch[i-1] = switch[i-1]^1

cnt = 0
for i in range(len(switch)):
    print(switch[i], end=' ')
    cnt += 1
    if cnt == 20:
        print()
        cnt = 0

 

배열이 0부터 시작하고 스위치는 1부터 시작하니까 생각보다 코드 작성하는데 너무 헷갈렸다 ㅋㅋ ㅠㅠ 

남자, 여자 별로 조건을 나눠서 코드를 작성해주었는데, 여자 학생 부분이 조금 까다로웠다.

cnt = 1로 설정해두고 조건에 맞는 경우(첫번째 if문에 만족하며, 두번째 if문 (좌우가 대칭인 경우)에도 만족하는 경우)엔 cnt를 1씩 증가해주었다. 아닌 경우에는 break로 무한 반복문을 빠져나오게 했다.

 

그런데 여기서 while문 처음에 cnt 값에 따라 m1, m2를 설정해두고 조건을 만족하는지 확인하기 때문에 조건이 맞지 않아도 m1, m2는 업데이트된다. 이 점을 방지하기 위해 그 다음 for문에서 m1+1, m2 이렇게 범위를 설정해주어 다시 그 전 (cnt를 통해 m1,m2를 업데이트 하기 전)으로 되돌려준 다음에 반복문을 돌려주게 작성하였다.

 

마지막 부분에 한줄에 20개씩 출력하는 것도 처음이라 조금 어려웠는데, 여기서도 cnt (위의 cnt와는 다른 cnt)를 0으로 설정해준 다음 20이 되면 한줄씩 띄고, 다시 cnt를 0으로 초기화.. 이렇게 반복해서 20개씩 출력하게 해주었다.

💪다짐

if 문이 있으면 후에 꼭! 작성해 주어야 할 else 문이 있는지 확인해주는 것을 잊지 않기로 다짐하였다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함