백준 문제풀이 - 15729번

이형래·2022년 6월 29일
0

백준문제풀이

목록 보기
20/36

백준 문제풀이 - 15729 번


링크 -> https://www.acmicpc.net/problem/15729


1. 요약 및 풀이방법

주어진 문제에 맞게 버튼을 켜고 꺼서 동일한 모양을 만드는 문제입니다.
이때, 버튼을 누르면 오른쪽 두개의 버튼도 동시에 켜지거나 꺼집니다.

간단한 문제이지만... 문제를 잘못읽고 한참 헤맨...

그리디 알고리즘에 맞게 왼쪽 버튼부터 확인하면서
주어진 문제와 다른 경우 켜거나 끄면 됩니다.
이때 모든 버튼은 처음에 0으로 초기화 되기때문에,
0인 경우 1, 1인 경우 0 으로 따로 바꿔 줄 필요 없이, not을 사용하여 상호 변환 하여줍니다.


2. Code

def main():
    N = int(input())
    targets = list(map(int, input().split()))
    buttons = [0] * N

    count = 0
    for idx, target in enumerate(targets):
        if buttons[idx] != target:
            count += 1
            buttons[idx:idx+3] = map(lambda x: not x, buttons[idx:idx+3])
    print(count)

if __name__ == "__main__":
    main()

3. 학습 내용

이 문제에서는 한 버튼을 누르면 그 버튼의 오른쪽 두 버튼 모두 켜지거나 꺼지게 됩니다.
따라서 반복문 안에서 오른쪽 두개의 버튼을 조작할 때,
만약 현재 버튼이 오른쪽 끝에서 두번째 안에 있는 버튼이라면
out of range 에러가 발생할 수 있습니다.
따라서 범위를 매번 확인해줘야하 하는데,
이때 list slicing을 사용하면 간단하게 해결 할 수 있습니다.


4. 결과

profile
머신러닝을 공부하고 있습니다. 특히 비전 분야에 관심이 많습니다.

0개의 댓글