홍우진의 개발 일기장
[백준] 1244번: 스위치 켜고 끄기 / 파이썬 본문
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
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1212번: 8진수 2진수 / 파이썬 (0) | 2025.01.09 |
---|---|
[백준] 14467번: 소가 길을 건너간 이유 1 / 파이썬 (0) | 2025.01.08 |
[백준] 17478번: 재귀함수가 뭔가요? / 파이썬 (0) | 2025.01.07 |
[백준] 15803번: PLAYERJINAH’S BOTTLEGROUNDS / 파이썬 (0) | 2025.01.06 |
[백준] 17247번: 택시 거리 / 파이썬 (0) | 2025.01.05 |
Comments