https://www.acmicpc.net/problem/1244
1244번: 스위치 켜고 끄기
첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩
www.acmicpc.net
def switch(k):
if s[k] == 0:
s[k] = 1
else:
s[k] = 0
return
n = int(input()) # 스위치 개수
s = [-1] + list(map(int,input().split())) # 스위치 상태
stu = int(input()) # 학생수
for _ in range(stu):
gen,num = map(int,input().split())
if gen == 1:
for i in range(num, n+1,num):
switch(i)
else:
switch(num)
for k in range(n//2):
if not num-k<1 and not n<num+k and s[num-k] == s[num+k]:
switch(num+k)
switch(num-k)
else:
break
for i in range(1, n+1):
print(s[i], end = " ")
if i % 20 == 0 :
print()
위에는 다른분꺼 참고해서 고친 코드.....왜 value error가 뜨는지...
def switch(k):
if k == 0:
return 1
else:
return 0
n = int(input()) # 스위치 개수
s = list(map(int,input().split())) # 스위치 상태
stu = int(input()) # 학생수
for _ in range(stu):
gen,num = map(int,input().split())
if gen == 1:
for i in range(n):
if (i+1) % num == 0:
s[i] = switch(s[i])
else:
lst = []
for k in range(1,n):
if 0<=num-1-k<n and 0<=num-1+k<n and s[num-1-k] == s[num-1+k]:
lst.append(num-1-k)
lst.append(num-1+k)
for h in range(min(lst),max(lst)+1):
s[h] = switch(s[h])
if n > 20:
cnt = 0
while cnt == n % 20:
for i in range(0, n, 20):
print(" ".join(s[i:i+20]))
cnt += 1
print(" ".join(s[n%20:]))
else:
print(*s)
지금보니 여자쪽의 k 범위랑 유효한 인덱스 범위가 안맞았던 것 같다...
인덱스 0 때문에 하나 차이나면 그냥 맨앞에 임의로 하나 넣어주고 하면 편하다!
'백준' 카테고리의 다른 글
2635. 수 이어가기 (0) | 2023.08.28 |
---|---|
백준 2669. 직사각형 네개의 합집합의 면적 구하기 (0) | 2023.08.28 |
백준 2346. 풍선 터뜨리기 (0) | 2023.08.20 |
백준 1158번: 요세푸스 문제 (0) | 2023.08.15 |
백준 2164번: 카드2 (0) | 2023.08.15 |