알고리즘 문제 풀기/백준(Baekjoon)

[백준 알고리즘] 1244. 스위치 켜고 끄기 - 파이썬

hibscus 2021. 2. 27. 21:35

 

 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()


 

 

확실히 많이 문제를 풀다보니 이번 문제는 그래도 꽤나 쉽게 그리고 빨리 풀었다.

 

 

 

그리고 요새는 무작정 많이 제출해보고 틀린 것을 확인해보기보다는, 조금 더 고민하고 생각한 뒤 제출하는 방향으로 바꾸려한다. 

 

빨리 풀고 오류를 찾는 게 더 좋다고 생각했는데, 오히려 틀린 부분을 찾으면서 더 헤매는 경우가 많은 것 같다.