[백준 1244] 스위치 켜고 끄기
🥚문제
https://www.acmicpc.net/problem/1244
- 구현
- 시뮬레이션
https://www.acmicpc.net/problem/1244
- 구현
- 시뮬레이션
🥚입력/출력
🍳코드
import sys
input = sys.stdin.readline
def boy(num):
idx = num
while idx <= n:
swch[idx] = 0 if swch[idx] == 1 else 1
idx += num
def girl(num):
i = 0
while 1 <= num - i and num + i <= n:
if swch[num-i] != swch[num+i]:
break
x = swch[num-i]
swch[num-i] = swch[num+i] = 0 if x == 1 else 1
i += 1
n = int(input())
swch = [-1] + list(map(int, input().split()))
for _ in range(int(input())):
sex, num = map(int, input().split())
if sex == 1:
boy(num)
else:
girl(num)
# 스위치의 상태를 한 줄에 20개씩 출력한다.
for i in range(1, n+1):
if i % 20 == 0:
print(swch[i])
else:
print(swch[i], end = ' ')
🧂아이디어
구현
- 남학생: 입력으로 받은 번호가 num이면, num의 배수 위치에 있는 스위치의 상태 반전
- boy(num)함수: idx(초기값 num)가 범위 내에 있을 때까지 idx에 num을 더해가며 스위치 상태를 반전해준다.
- 여학생: 자기가 받은 수와 같은 번호가 붙은 스위치를 중심으로 좌우가 대칭이면서 가장 많은 스위치를 포함하는 구간을 찾아서, 그 구간에 속한 스위치의 상태를 모두 바꾼다. 이때 구간에 속한 스위치 개수는 항상 홀수.
- girl(num)함수: i를 0부터 시작해 1씩 늘려가면서 num-i과 num+i가 범위 내에 있는지 확인한다.
범위 내에 있고, swch[num-i]와 swch[num+i]의 값이 같으면 그 값들을 반전해준다.
범위 내에 있지 않거나 두 값이 같지 않다면 break.
- "출력 형식이 잘못되었습니다"가 떴었는데, 이는 문제의 출력 조건인 "1번 스위치에서 시작하여 마지막 스위치까지 한 줄에 20개씩 출력한다."를 못 보고 한 줄에 다 출력해서 한 실수😱
문제를 꼼꼼하게 읽는 것이 중요!
Author And Source
이 문제에 관하여([백준 1244] 스위치 켜고 끄기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@eastgloss0330/백준-1244-스위치-켜고-끄기
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- boy(num)함수: idx(초기값 num)가 범위 내에 있을 때까지 idx에 num을 더해가며 스위치 상태를 반전해준다.
- girl(num)함수: i를 0부터 시작해 1씩 늘려가면서 num-i과 num+i가 범위 내에 있는지 확인한다.
범위 내에 있고, swch[num-i]와 swch[num+i]의 값이 같으면 그 값들을 반전해준다.
범위 내에 있지 않거나 두 값이 같지 않다면 break.
문제를 꼼꼼하게 읽는 것이 중요!
Author And Source
이 문제에 관하여([백준 1244] 스위치 켜고 끄기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@eastgloss0330/백준-1244-스위치-켜고-끄기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)