Today
Total
01-10 10:50
관리 메뉴

홍우진의 개발 일기장

[백준] 1244번: 스위치 켜고 끄기 / 파이썬 본문

알고리즘/백준

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

홍우진 2025. 1. 8. 14:48
728x90
반응형

문제 링크


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

 

풀이 코드


n = int(input())
s = list(map(int,input().split()))
x = int(input())

for i in range(x):
    sex, num = map(int,input().split()) #성별과 번호를 받는다.
    if sex == 1:    #남자라면
        for j in range(num,n+1,num):    #번호 배수의 스위치를 바꾼다.
            s[j-1] = abs(s[j-1]-1)      #abs는 절대값. -1을 한 후 절댓값을 씌우면 번호가 바뀜.
    else:   #여자라면
        s[num-1] = abs(s[num-1]-1)      #받은 번호의 스위치를 변경 
        cnt = 1
        while num-cnt > 0 and num+cnt <= n: #값이 스위치의 범위를 넘어서지 않을 때 까지 탐색
            if s[num-1 - cnt] == s[num-1 + cnt]:    #스위치의 앞과 뒤 스위치의 상태가 같다면
                s[num-1 - cnt] = abs(s[num-1 - cnt] -1) #앞 스위치 변경
                s[num-1 + cnt] = abs(s[num-1 + cnt] -1) #뒤 스위치 변경
                cnt += 1
            else:
                break

for i in range(1,n+1):
    print(s[i], end = " ")  #한 칸씩 띄어서 출력
    if i % 20 == 0: #만약 20개를 넘어선다면
        print() #다음줄

코드 해석


 

abs 절댓값 함수를 사용하여 0, 1 을 1, 0 으로 변경한다.abs(x -1)ex) abs(0 -1) = 1, abs(1 -1) = 0

 

 

풀어보면 쉽지만 전체적으로 따질게 많아서 까다로웠다. 머리 터질뻔.

난이도: ★★☆

728x90
반응형
Comments