본문 바로가기
알고리즘/백준 solved.ac PS

[백준][solved.ac][Bronze 2][Python] 21918번 : 전구

by 빛밤하늘 2021. 6. 30.
반응형

밑의 링크는 백준에서의 문제 링크입니다.

 

21918번: 전구

$N$개의 전구가 있고 맨 왼쪽에 있는 전구를 첫 번째라고 하자. 전구의 상태는 두 가지가 있으며 이를 숫자로 표현한다. $1$은 전구가 켜져 있는 상태를 의미하고, $0$은 전구가 꺼져 있는 상태를

www.acmicpc.net

 

 

 

 

 

 

 

 

파이썬 코드와 결과입니다.

# readline을 사용하기 위해 import합니다.
from sys import stdin


# 첫 번째 줄에 전구의 개수 N, 입력되는 명령어의 개수 M을 공백으로 구분해 입력합니다.
# 1 <= N, M <= 4,000
# 각각 정수형으로 변환합니다.
N, M = map(int, stdin.readline().split(' '))
# 두 번째 줄에는 N개의 전구가 현재 어떤 상태인지들을 공백으로 구분해 입력합니다.
# 각각 정수형으로 변환하고 리스트 변수로 만들어줍니다.
bulbs = list(map(int, stdin.readline().split(' ')))

# 명령어의 개수 M개만큼 반복합니다.
for M_idx in range(M):
    # a번 명령어 a, a에 따른 b, c 명령어들을 공백으로 구분해 입력합니다.
    # 1 <= a <= 4
    # 각각 정수형으로 변환합니다.
    a, b, c = map(int, stdin.readline().split(' '))

    # a가 1인 경우
    if a == 1:
        # b-1번째 전구의 상태를 c로 변경합니다.
        bulbs[b - 1] = c
    # a가 2인 경우
    elif a == 2:
        # b-1번째부터 c-1번째 전구의 상태를 반복해봅니다.
        for bulb_idx in range(b - 1, c):
            # 현재 전구의 상태가 꺼져있는 상태인 0이라면
            if bulbs[bulb_idx] == 0:
                # 1로 변경합니다.
                bulbs[bulb_idx] = 1
            # 현재 전구의 상태가 켜져있는 상태인 1이라면
            elif bulbs[bulb_idx] == 1:
                # 0으로 변경합니다.
                bulbs[bulb_idx] = 0
    # a가 3인 경우
    elif a == 3:
        # b-1번째 전구부터 c-1번째 전구를 모두 끈 상태인 0으로 만들어줍니다.
        bulbs[b - 1:c] = [0] * (c - b + 1)
    # a가 4인 경우
    elif a == 4:
        # b-1번째 전구부터 c-1번째 전구를 모두 켠 상태인 1로 만들어줍니다.
        bulbs[b - 1:c] = [1] * (c - b + 1)

# 모든 명령어를 수행한 후 각 전구의 상태를 출력 형식에 맞게 출력합니다.
for bulb in bulbs:
    print(bulb, end=' ')

결과

 

처음에 코드를 짰을 때는 제대로 짠 것 같은데 예제 입력을 넣어도 계속 맞는 출력이 나오지 않았습니다.

문제를 다시 읽어보니 문제에서는 몇 번째까지의 전구를 지정할 때,

파이썬 리스트의 인덱스처럼 0부터 세는 것이 아닌

우리가 일상적으로 세는 방법인 1부터 세는 것으로 표현해서 계속 다른 결과가 나왔었습니다.

 

급하게 풀지말고 문제를 잘 읽어야겠습니다...

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

반응형

댓글