학생수만큼 받은 번호에 따라 스위치 처리
남학생일 경우 : 받은 번호의 배수인 스위치 모두 변경 (0 → 1 , 1 → 0)
여학생일 경우 : 받은 번호를 중심으로 상태가 대칭되는 스위치 모두 변경 (0 → 1 , 1 → 0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BaekJoon1244 {
static int N, student;
static int[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
arr = new int[N+1];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=1; i<=N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
student = Integer.parseInt(br.readLine());
for(int i=0; i<student; i++) {
st = new StringTokenizer(br.readLine());
int gender = Integer.parseInt(st.nextToken());
int index = Integer.parseInt(st.nextToken());
if(gender == 1) { // 남학생일 경우
male(index);
}else { // 여학생일 경우
female(index);
}
}
int j = 1;
StringBuilder sb = new StringBuilder();
while(j<=N) {
sb.append(arr[j]+" ");
if(j % 20 == 0) { // 한 줄에 20개씩 출력
sb.append("\n");
}
j++;
}
System.out.println(sb.toString());
}
private static void male(int index) {
int mul = 2;
for(int i=index; i<=N; i = index*mul++) { // 받아온 인덱스를 기점으로 배수 위치 토글 변환
if(arr[i] == 1)
arr[i] = 0;
else arr[i] = 1;
}
}
private static void female(int index) {
if(arr[index] == 1) // 받아온 위치 토글 변환
arr[index] = 0;
else arr[index] = 1;
// 받아온 위치 제외하고 양 옆으로 대칭되는지 체크
for(int i=index-1, j=index+1; i>=1 && j<=N; i--, j++) { // 조건문에서 배열 범위 체크
if(arr[i] == arr[j]) {
if(arr[i] == 1) {
arr[i] = 0;
arr[j] = 0;
}
else {
arr[i] = 1;
arr[j] = 1;
}
}else break;
}
}
}
'CODING > BAEKJOON' 카테고리의 다른 글
[BAEKJOON] 직사각형 쿼리 (0) | 2022.09.22 |
---|---|
[BAEKJOON] 아기상어 (0) | 2022.08.30 |
[BAEKJOON] 연구소 (0) | 2022.07.21 |
[BAEKJOON] 2468번 안전 영역 (0) | 2022.05.26 |
[BAEKJOON] 2579번 계단 오르기 (0) | 2022.04.24 |
댓글