본문 바로가기
🔅코딩테스트 공부🔅/❗백준

[백준] 1244번 스위치 켜고 끄기(python)

by 윤무무 2023. 4. 15.

https://www.acmicpc.net/problem/1244

 

1244번: 스위치 켜고 끄기

첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩

www.acmicpc.net

 

1. 난이도 실버 4

 

2. 내가 작성한 코드

 

출력 형식이 잘못됐다는 에러가 뜨시는 분들은 출력의 조건을 잘 확인하시길 (나도 이걸 놓쳐서 틀렸었다.)

 

* 스위치의 상태를 1번 스위치에서 시작하여 마지막 스위치까지 한 줄에 20개씩 출력한다.

 

1과 0을 변환해주기 위해 if문을 써도 괜찮지만 (value + 1) % 2 를 해주면 더 간결해진다.

 

n = int(input())
switch = list(map(int, input().split()))
m = int(input())

def man(x): #남자의 경우 배수의 스위치를 변환
    num = x
    i = 1
    while x-1 < len(switch):
        switch[x-1] = (switch[x-1]+1) % 2
        i += 1
        x = num * i

def woman(x): #여자의 경우 좌우 대칭의 경우에만 변환
    switch[x] = (switch[x]+1) % 2
    i = 1
    while x+i < n and x-i > -1 and switch[x+i] == switch[x-i]:
        switch[x+i] = (switch[x+i]+1) % 2
        switch[x-i] = (switch[x-i]+1) % 2
        i += 1

for i in range(m):
    gender, num = map(int, input().split())
    if gender == 1:
        man(num)
    elif gender == 2:
        woman(num-1)


for j in range(1, n+1, 20):
    for i in switch[j-1:j+19]:
        print(i, end=" ")
    print()

 

다른 사람의 코드와 비교해보니

 

출력 시에 2중 for문을 이용하지 않고 20의 배수인 경우마다 print() 를 넣어주는 게 더 좋을 것 같다.

댓글