문제 링크
https://www.acmicpc.net/problem/1244
소스 코드
k = int(input())
switches = list(map(int,input().split()))
n = int(input())
for i in range(n):
sex,num = map(int,input().split()) # 성별,숫자 입력
if sex == 1: # 남자인 경우
for j in range(num-1,k//num*num,num): # 배수 인덱스
if switches[j] == 0: # 스위치 변환
switches[j] = 1
else: switches[j] = 0
else: # 여자인 경우
num -= 1 # 인덱스 변환
tmp = 0 # 좌우로 넓힐 칸 숫자
# 인덱스 범위를 만족하는 동안 반복
while (num-tmp) >= 0 and (num+tmp) < k:
# 기준 인덱스 좌우가 동일하다면 범위 증가
if switches[num-tmp] == switches[num+tmp]:
tmp += 1
else: # 동일하지 않으면 이전 범위로 축소
tmp -= 1
break
# 인덱스를 벗어나서 중단된 경우 범위 조정
if (num-tmp) < 0 or (num+tmp) >= k:
tmp -= 1
# 기준 인덱스 중심으로 스위치 변환
for j in range(num-tmp,num+tmp+1):
if switches[j] == 0:
switches[j] = 1
else: switches[j] = 0
cnt = 0
for i in range(len(switches)-1):
print(switches[i],end=' ') # 띄어쓰기 옵션
cnt += 1
# 20개마다 줄 바꾸고 카운트 초기화
if cnt == 20:
cnt = 0
print('')
print(switches[-1]) # 마지막 한 개는 띄어쓰기 없이 따로 출력
해설
- 단순 구현 문제
이 문제를 풀기 위해서는 어려운 개념이 필요하지 않습니다.
단순히 문제에서 요구하는 내용을 조건문과 반복문으로 잘 구현하면 됩니다.
1) 남자인 경우
저는 num이라는 변수에 인덱스를 저장했습니다.
따라서 스위치 리스트에 num의 배수가 되는 인덱스들을 전부 바꿔주면 됩니다.
for j in range(num-1,k//num*num,num): # 배수 인덱스
if switches[j] == 0: # 스위치 변환
switches[j] = 1
else: switches[j] = 0
문제를 보면 첫 시작이 1번이기 때문에 인덱스를 맞춰주기 위해서 범위를 num-1부터로 설정했습니다.
range는 (start, end, step) 이기 때문에, 배수의 최대 범위인 k//num*num 으로 설정합니다.
간격은 num으로 해서 배수 인덱스를 찾을 수 있도록 했습니다.
2) 여자인 경우
여자인 경우는 num을 기준으로 좌우 탐색 구간을 점점 넓혀나가야 하기 때문에 좀 더 까다롭습니다.
저는 while문의 조건을 탐색 범위가 리스트의 범위를 만족하도록 설정했습니다.
이때 num을 기준으로 좌우 간격을 넓히면서 좌우의 값이 동일하면 간격을 넓히고 추가 탐색을 진행합니다.
만약 좌우가 동일하지 않으면 이전 범위가 최대이므로 반복문을 종료합니다.
단순히 while문의 조건에 의해 반복문이 종료된 경우, 스위치를 변경할 범위를 조정할 필요가 있으므로 수정해줍니다.
위 과정이 모두 끝나면, 남자인 경우와 마찬가지로 확인한 범위에 대해서 스위치를 바꿔줍니다.
3) 20개씩 출력
문제 출력 조건을 살펴보면 한 줄에 최대 20개씩 출력이 가능하다고 되어 있습니다.
예시에는 포함되어 있지 않으므로 주의해서 코드를 작성해야 합니다.
print 함수에 end 라는 키워드를 사용하면 띄어쓰기를 수월하게 포함시킬 수 있습니다.
또한 출력 예시를 드래그해서 보면 맨 마지막 숫자가 출력된 이후에는 띄어쓰기가 포함되어 있지 않으므로,
전체 리스트 원소 중 마지막은 따로 출력해서 공백 없이 출력이 완성되도록 해줍니다.
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 10799 : 쇠막대기 [자료구조](Python) (0) | 2023.02.20 |
---|---|
[BOJ] 1260 : DFS와 BFS [그래프 이론](Python) (0) | 2023.02.17 |
[BOJ] 1966 : 프린터 큐 [자료구조](Python) (0) | 2023.02.15 |
[BOJ] 2504 : 괄호의 값 [자료구조](Python) (0) | 2023.02.15 |
[BOJ] 17626 : Four Squares [DP](Python) (0) | 2022.10.04 |