본문 바로가기

알고리즘 공부/연습 문제

백준) 1244 - 파이썬

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

 

1244번: 스위치 켜고 끄기

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

www.acmicpc.net

생각

과정을 분할해서 생각해봤다.


총 4가지 과정을 거쳐야한다.

 

1. 스위치의 개수, 스위치의 상태, 학생의 수, 학생 성별과 학생이 받은 스위치 수 구현

2. 학생의 성별이 남자일 경우 받은 스위치 번호의 배수들을 전부 뒤바꾼다

3. 학생의 성별이 여자일 경우 받은 스위치 양 옆 번호들을 계속 비교해서 두 개가 같은 경우 뒤바꾸고 아닌 경우 스탑한다.

4. 20개 단위로 끊어서 출력

 

이 4가지를 그대로 구현하면 된다.

 

풀이

import sys
#1. 입력 파트(학생 성별과 받은 스위치 번호 제외)
countSwitch=int(sys.stdin.readline())
switches=list(sys.stdin.readline().split())
students=int(sys.stdin.readline())

#2. 남자가 받은 경우 로직(학생 성별과 받은 스위치 번호 처리)
for _ in range(students):
    studentState=list(map(int,sys.stdin.readline().split()))
    now=studentState[1]
    if studentState[0]==1:
        for i in range(now-1,countSwitch,now):
            if switches[i]=='1':
                switches[i]='0'
            else:
                switches[i]='1'
#3. 여자가 받은 경우 로직
    else:
        i=0
        while(now-i-1>=0 and now+i-1<countSwitch):
            if switches[now-i-1]==switches[now+i-1]:
                if switches[now-i-1]=='1':
                    switches[now-i-1]='0'
                    switches[now+i-1]='0'
                else:
                    switches[now-i-1]='1'
                    switches[now+i-1]='1'
                i+=1
            else:
                break
#4. 20개씩 끊어서 출력
count=0
for s in switches:
    if(count%20==0 and count!=0):
        print()
    print(int(s),end=" ")
    count+=1

느낀 점

아무래도 단순 구현에 있어서 내가 생각한 대로 구현하지 못하는 경우가 많은 것 같다.

많은 문제를 풀어봐야겠다.

'알고리즘 공부 > 연습 문제' 카테고리의 다른 글

이코테) 게임 개발-실전 문제  (0) 2023.11.23
백준) 1463 - 1로 만들기 (Python)  (1) 2023.10.21
백준) 10431 - 파이썬  (0) 2023.09.07
백준) 11723 - 파이썬  (0) 2023.09.06
백준) 2635 - 파이썬  (0) 2023.09.06