1244. 스위치 켜고 끄기
문제를 풀기 전에 먼저 작게 나눠서 생각하려 노력을 많이 하는데,
그렇게 하는 이유는 1) 작게 생각하는 과정 없이 무작정 들이댔다가 오히려 더 돌아감. 2) 작게 생각하면 문제 접근하기도 용이함.
결국 2개다 문제를 조금 더 쉽게 접근할 수 있다는 같은 이유인 것 같다.
이 문제도 당연히 남자, 여자를 나누어서 풀었다.
남자인 경우, 배수 일때 스위치를 바꿔주어야 하므로 range를 이용해 간격을 두어 배수만 찾아다니도록 했다.
여자인 경우, 전체길이의//2 만큼 탐색하도록 했다.(양쪽을 탐색하므로)
그리고 스위치의 상태를 바꾸는 것은 남자나 여자나 공통적으로 필요함으로 따로 함수를 두어 사용해 코드를 간결하게 하도록 했다.
def change(num):
if switch[num] == 0:
switch[num] = 1
else:
switch[num] = 0
return
N = int(input())
switch = [-1] + list(map(int, input().split()))
students = int(input())
for _ in range(students):
sex, num = map(int, input().split())
# 남자
if sex == 1:
for i in range(num, N+1, num):
change(i)
# 여자
else:
change(num)
for k in range(N//2):
if num + k > N or num - k < 1 : break
if switch[num + k] == switch[num - k]:
change(num + k)
change(num - k)
else:
break
for i in range(1, N+1):
print(switch[i], end = " ")
if i % 20 == 0 :
print()
확실히 많이 문제를 풀다보니 이번 문제는 그래도 꽤나 쉽게 그리고 빨리 풀었다.
그리고 요새는 무작정 많이 제출해보고 틀린 것을 확인해보기보다는, 조금 더 고민하고 생각한 뒤 제출하는 방향으로 바꾸려한다.
빨리 풀고 오류를 찾는 게 더 좋다고 생각했는데, 오히려 틀린 부분을 찾으면서 더 헤매는 경우가 많은 것 같다.
'알고리즘 문제 풀기 > 백준(Baekjoon)' 카테고리의 다른 글
[백준 알고리즘] 10026. 적록색약 - 파이썬, DFS (0) | 2021.03.08 |
---|---|
[백준 알고리즘] 1012 유기농배추 _ 파이썬, dfs (0) | 2021.03.08 |
[백준 알고리즘] 1018번 체스판 다시 칠하기 - 브루트포스, 파이썬 (0) | 2021.02.21 |
[백준 알고리즘] 2846. 오르막길 _ 파이썬 (0) | 2021.02.21 |
[백준 알고리즘] 1713번 후보 추천하기 - 파이썬 (2) | 2021.02.20 |