미소를뿌리는감자의 코딩
[백준 2024/02/20] 1244번 스위치 켜고 끄기 본문
728x90
https://www.acmicpc.net/problem/1244
1. 접근 방법
- male : 해당 수의 배수에 대해서 스위치를 키거나 끔
- female : 특정 스위치에 대해서 대칭일 때까지 스위치를 누름
male의 경우 직관적으로 접근해주면 되며, female의 경우 2개의 pointer (l, r 변수)를 이용해서 하나씩 넓혀나간다. 만약 값이 같다면 스위치를 바꾸어주고, 다르다면 while 문을 탈출해주면 된다.
2. 코드
def male(n):
i = 2
n_mul = n
while n_mul <= num_range:
light_status[n_mul] = 1 if light_status[n_mul] == 0 else 0
n_mul = n * i
i += 1
return
def female(n):
l = n
r = n
light_status[n] = 1 if light_status[n] == 0 else 0
while l > 0 and r <= num_range and light_status[l] == light_status[r]:
light_status[l] = 1 if light_status[l] == 0 else 0
light_status[r] = 1 if light_status[r] == 0 else 0
l -= 1
r += 1
return
def print_light():
light_status.pop(0)
for i, value in enumerate(light_status, 1):
print(value, end=' ')
if i % 20 == 0:
print()
if __name__ == '__main__':
num_range = int(input())
light_status = list(map(int, input().split()))
light_status.insert(0, -1)
for _ in range(int(input())):
sex, num = map(int, input().split())
if sex == 1:
male(num)
else:
female(num)
print_light()
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준 2024/02/20] 11559번 Puyo Puyo (0) | 2024.02.20 |
---|---|
[백준 2024/02/20] 20055번 컨베이어 벨트 위의 로봇 (0) | 2024.02.20 |
[백준 2024/02/19] 16398번 행성 연결 (1) | 2024.02.19 |
[백준 2024/02/19] 1647번 도시 분할 계획 (1) | 2024.02.19 |
[백준 2024/02/19] 13905번 세부 (0) | 2024.02.19 |