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 |