룰루코딩

백준 1244 스위치 켜고 끄기 본문

백준

백준 1244 스위치 켜고 끄기

rulru01 2024. 11. 10. 02:13

문제


솔루션

N = int(input())
switch = list(map(int,input().split()))
M = int(input())
for _ in range(M):
    gender,num = map(int,input().split())
    num -= 1 
    if gender ==1:
        for i in range(N):
            if (i+1) %(num+1)==0:
                switch[i]= 1 if switch[i]==0 else 0
    elif gender == 2:
        switch[num] = 1 if switch[num] == 0 else 0
        i = 1
        while num - i >= 0 and num + i < N and switch[num - i] == switch[num + i]:
            switch[num - i] = 1 if switch[num - i] == 0 else 0
            switch[num + i] = 1 if switch[num + i] == 0 else 0
            i += 1
for i in range(N):
    print(switch[i], end=' ')
    if (i + 1) % 20 == 0:
        print()

깨달은 점

구현문제인데 이해는 가는데 지문이 길었다.

다른부분은 다 괜찮았는데 여자부분하고 헷갈리는 부분이 좀 있었다.

    elif gender == 2:
        for i in range(0,N//2):
            if switch[num+i]!=switch[num-i]:
                upto = i
                break
        for i in range(0,upto):
            switch[num]= 1 if switch[num]==0 else 0
            switch[num+i]= 1 if switch[num+i]==0 else 0
            switch[num-i]= 1 if switch[num-i]==0 else 0

여자 부분에서 처음엔 범위를 저장해서 if문을 돌려 푸려고 했지만 인덱스에러가 발생했다.

    elif gender == 2:
        switch[num] = 1 if switch[num] == 0 else 0
        i = 1
        while num - i >= 0 and num + i < N and switch[num - i] == switch[num + i]:
            switch[num - i] = 1 if switch[num - i] == 0 else 0
            switch[num + i] = 1 if switch[num + i] == 0 else 0
            i += 1

while문을 이용하면 되는 일이였다.

 

그리고 주의할 점으로는 인덱스부분.

    num -= 1

 

처음에는 빼먹고 넣지못한 부분인데 입력받은 숫자에서 -1을 해줘야 인덱스와 같아지기 때문에 꼭 필요하다.

            if (i+1) %(num+1)==0:

 

그리고 남자 배수찾는 부분에서도 둘다 +1을 해주고 계산 해야한다. 

 

또 주의할 점으로 출력형식이 잘못돼서 오류가 났었다.

for i in range(N):
    print(switch[i], end=' ')
    if (i + 1) % 20 == 0:
        print()

스위치의 상태를 1번 스위치에서 시작하여 마지막 스위치까지 한 줄에 20개씩 출력한다. 이부분을 주의해야한다.

한 줄에 20개씩 출력하도록하는 코드이다.

 

 

 

그리고 나는 파이썬 삼항연산자를 이용해 스위치 토글을 바꾸었는데 다른 풀이를 찾아보니 스위치바꾸는 함수를 만들어서 많이 푼 것 같다.

def change(num):
    if switch[num] == 0:
        switch[num] = 1
    else:
        switch[num] = 0
    return

이런식으로..

def change(num):
    if switch[num] == 0:
        switch[num] = 1
    else:
        switch[num] = 0

N = int(input())
switch = list(map(int, input().split()))
M = int(input())


for _ in range(M):
    gender, num = map(int, input().split())
    num -= 1 
    if gender == 1:
        for i in range(num, N, num + 1):
        	change(i)
    elif gender == 2:
    	change(num)
    	i = 1
    	while num - i >= 0 and num + i < N and switch[num - i] == switch[num + i]:
        	change(num - i)
        	change(num + i)
        	i += 1

for i in range(N):
    print(switch[i], end=' ')
    if (i + 1) % 20 == 0:
        print()

 

'백준' 카테고리의 다른 글

백준 11286 절댓값 힙  (1) 2024.11.10
백준 16435 스네이크버드  (0) 2024.11.10
백준 2563 색종이  (0) 2024.11.10
백준 3040 백설 공주와 일곱 난쟁이  (1) 2024.11.10
백준 2178 미로 탐색  (0) 2024.11.09