반응형
https://www.acmicpc.net/problem/1244
스위치 켜고 끄기 문제
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의 범위를 제대로 고려해주지 않아서 생긴 문제였고, 이걸 해결하고 나니 쉽게 풀 수 있었다.
이런 간단한 문제도 구현에 애먹는걸보니 아직 갈 길이 멀었다는걸 계속 느꼈다.
반응형
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준 1051] 숫자 정사각형 (python) (0) | 2023.03.18 |
---|---|
[백준 16931] 겉넓이 구하기(python) (0) | 2023.03.17 |
[백준 9663] N-Queen (python) (0) | 2023.03.12 |
[백준 24479] 알고리즘 수업 - 깊이 우선 탐색 1 (python) (0) | 2023.03.11 |
[백준 12851] 숨바꼭질 2 (python) (0) | 2023.03.09 |
댓글