본문 바로가기
알고리즘 풀이/백준

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

by char_lie 2023. 3. 15.
반응형

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

 

1244번: 스위치 켜고 끄기

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

www.acmicpc.net

스위치 켜고 끄기 문제

0과 1로 이루어진 스위치를 조건에 맞게 켜고 끄는 문제

조건만 잘 생각하면 어렵지 않게 구현할 수 있는 문제!

내가 푼 정답 코드

 

import sys
N = int(sys.stdin.readline())
switch = [-1] + list(map(int, sys.stdin.readline().split()))
M = int(sys.stdin.readline())
for _ in range(M):
    student, num = map(int, sys.stdin.readline().split())
    if student == 1 :
        for i in range(1, N//num+1):
            if switch[i*num] == 0 :
                switch[i*num] = 1
            else     :
                switch[i*num] = 0
    if student == 2 :
        if switch[num] == 0:
            switch[num] = 1
        else :
            switch[num] = 0
        left, right = num-1, num+1
        while left > 0 and right <= N and switch[left] == switch[right]:
            if switch[left] == 0:
                switch[left], switch[right] = 1,1
            else :
                switch[left], switch[right] = 0,0
            left = left - 1
            right = right + 1
# 출력 조건에 맞춰주자 	
for k in range(1,N+1):
    print(switch[k], end=" ")
    if k % 20 == 0:
        print()

입력 값을 받아 주면서, 학생의 성별이 남자일 때와 여자일 때를 조건을 나누어서 풀어주면 되는 문제이다.

📌 문제 접근 포인트

1. 주어진 조건의 인덱스가 0이 아닌 1부터 시작하므로 인덱스를 조절하기 위해 -1을 추가
2. 남자일 때는 주어진 숫자의 배수를 바꿔주도록 함수를 간단하게 구성
3. 여자일 때는 왼쪽과 오른쪽을 비교하여 바꾸는 것이 요구사항, 범위 내에 있을 때와 양쪽이 같은지 확인하면서 같을 때까지 계속 while문으로 탐색 반복 
4. 문제의 조건 출력 형식에 맞춰서 나올 수 있도록 print

느낀 점

간단하면서도 생각보다 조건을 놓치기 쉬운 문제였다. 처음에 풀 때는 인덱스 에러가 자꾸 떠서 어디서 에러가 자꾸 발생하나 찾느라 애를 먹었다. right와 left의 범위를 제대로 고려해주지 않아서 생긴 문제였고, 이걸 해결하고 나니 쉽게 풀 수 있었다.

이런 간단한 문제도 구현에 애먹는걸보니 아직 갈 길이 멀었다는걸 계속 느꼈다.

반응형

댓글