본문 바로가기
파이썬 코딩테스트

백준 12927번 - 배수 스위치 (파이썬/Python)

by 준벨롭 2024. 3. 10.

문제

강호는 전구 N개를 가지고 있다. 전구는 1번부터 N번까지 번호가 매겨져 있으며, 일렬로 놓여져 있다. 전구는 켜져있거나 꺼져있다.

강호는 모든 전구를 끄려고 한다. 강호는 전구를 켜고 끌 수 있는 스위치 N개를 가지고 있고, 스위치도 1번부터 N번까지 번호가 매겨져 있다. i번 스위치는 i의 배수 번호를 가지는 전구의 상태를 모두 반전시킨다.

현재 전구의 상태가 주어졌을 때, 모든 전구를 끄기 위해서 스위치를 몇 번 눌러야하는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 전구의 상태가 1번 전구부터 차례대로 주어진다. Y는 전구가 켜 있는 경우, N은 전구가 꺼져있는 경우이다. 전구의 개수는 1보다 크거나 같고 1,000보다 작거나 같은 자연수이다.

출력

모든 전구를 끄기 위해서 스위치를 몇 번 눌러야 하는지 출력한다. 만약, 모든 전구를 끌 수 없다면 -1을 출력한다.

문제 링크

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

 

12927번: 배수 스위치

첫째 줄에 전구의 상태가 1번 전구부터 차례대로 주어진다. Y는 전구가 켜 있는 경우, N은 전구가 꺼져있는 경우이다. 전구의 개수는 1보다 크거나 같고 1,000보다 작거나 같은 자연수이다.

www.acmicpc.net

답안

lst = list(input())
lst.insert(0,'N')

cnt = 0

for i in range(1,len(lst)):
    if lst[i] == 'Y':
        for j in range(i, len(lst), i):
            if lst[j] == 'Y':
                lst[j] = 'N'
            else:
                lst[j] = 'Y'
        cnt += 1
print(cnt)

후기

1번 전구부터 있기 때문에 0번째 인덱스에는 N(꺼져있는 전구)을 넣어준다. 그리고 그 후, 켜져있는 전구를 찾아 그 배수 인덱스에 있는 전구의 상태를 반전시켜준다.

그리고 반전시킨 횟수를 출력하면 정답이 나온다. 쉬운 그리디 문제이다.

728x90