아이디어
- 남자인 경우는 간단하게 for문을 배수만큼 돌려준다.
- 여자인 경우, 팰린드롬을 찾아 스위치를 켜고 끈다.
풀이 및 해설(주석) (파이썬)
N = int(input())
arr = list(map(int, input().split()))
P = int(input())
for i in range(P):
s, n = map(int, input().split())
if s == 1: # 남자일때
for j in range(n-1, N, n): # 수의 배수 만큼 인덱스 순회
if arr[j] == 1:
arr[j] = 0
else:
arr[j] = 1
elif s == 2: # 여자일때
l, r = n-2, n # l, r 을 투 포인터 개념으로 잡아줌
while True:
if l < 0 or r >= N: # 경계 체크
break
if arr[l] != arr[r]: # 팰린드롬 문자열 찾기와 비슷하다.
break # 하지만, 이 문제는 홀수개의 팰린드롬만 찾으면 된다.
else:
l -= 1
r += 1
for j in range(l+1, r):
if arr[j] == 1:
arr[j] = 0
else:
arr[j] = 1
for i in range(0, N, 20): # 여기서 좀 해맸는데, 21번째 부터는 다음줄에 출력하기
print(*arr[i:i+20])
풀이 (자바)
import java.io.*;
import java.util.Arrays;
import java.util.Objects;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(bf.readLine());
String[] tmp = bf.readLine().split(" ");
int[] swi = new int[N];
for (int i = 0; i < N; i++) {
swi[i] = Integer.parseInt(tmp[i]);
}
int M = Integer.parseInt(bf.readLine());
for (int i = 0; i < M; i++) {
String[] info = bf.readLine().split(" ");
if (info[0].equals("1")) {
int manIdx = Integer.parseInt(info[1]);
for (int j = manIdx-1; j < N; j+=manIdx) {
int nowSwi = swi[j];
if (nowSwi == 0) {
swi[j] = 1;
} else {
swi[j] = 0;
}
}
} else {
int l = Integer.parseInt(info[1]) - 2;
int r = Integer.parseInt(info[1]);
while (true) {
if (l < 0 || r >= N) {
break;
}
if (swi[l] != swi[r]) {
break;
}
else {
l -= 1;
r += 1;
}
}
for (int j = l+1; j < r; j++) {
if (swi[j] == 1) {
swi[j] = 0;
} else {
swi[j] = 1;
}
}
}
}
for (int i = 0; i < swi.length; i++) {
if (i!=0 && i%20 == 0) {
bw.newLine();
}
bw.write(String.valueOf(swi[i] + " "));
}
bw.close();
}
}
'백준' 카테고리의 다른 글
백준 10163 색종이 (파이썬) (0) | 2022.08.28 |
---|---|
백준 10157 자리배정 (파이썬) (0) | 2022.08.28 |
백준 2578 빙고 (파이썬) (0) | 2022.08.23 |
백준 2635 수 이어가기 (파이썬) (0) | 2022.08.23 |
백준 1330 두 수 비교하기 (파이썬) (0) | 2022.08.07 |