백준 - 스위치 켜고 끄기
문제 링크
https://www.acmicpc.net/problem/1244
문제 입력 1
8
0 1 0 1 0 0 0 1
2
1 3
2 3
1 0 0 0 1 1 0 1
문제 입력 2
8
0 0 0 0 0 0 0 0
8
1 2
1 3
1 4
1 5
2 2
2 3
2 4
2 5
0 1 1 1 0 1 1 0
문제 풀이
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 구현, 시뮬레이션
public class Main {
static int N, K;
static int[] arr;
static int[][] stus;
// 스위치 on/off 함수
public static int doSwitch(int idx) {
return arr[idx] == 1 ? 0 : 1;
}
// 스위치 대칭 찾는 함수
public static void isSwitch(int idx) {
for (int i = 1; i <= N; i++) {
if (idx - i < 1 || idx + i >= N + 1) continue;
int prev = arr[idx - i];
int next = arr[idx + i];
if (prev == next) {
arr[idx - i] = doSwitch(idx - i);
arr[idx + i] = doSwitch(idx + i);
} else break; // 여기 조심. break 안하면 계속 찾는다.
}
}
public static void main(String[] args) throws Exception {
System.setIn(new FileInputStream("input2.txt"));
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());
}
// 학생 수, 학생 배열
K = Integer.parseInt(br.readLine());
stus = new int[K][2];
// 학생 배열 입력
for (int i = 0; i < K; i++) {
st = new StringTokenizer(br.readLine());
stus[i][0] = Integer.parseInt(st.nextToken());
stus[i][1] = Integer.parseInt(st.nextToken());
}
// 탐색
for (int i = 0; i < K; i++) {
int gender = stus[i][0]; // 학생 성별
int no = stus[i][1]; // 받은 스위치 번호
// 남학생 이라면
if (gender == 1) {
for (int j = no; j <= N; j += no)
arr[j] = doSwitch(j);
} else if (gender == 2) { // 여학생 이라면
arr[no] = doSwitch(no);
isSwitch(no);
}
}
// 20개마다 출력해야 한다.
for (int i = 1; i <= N; i++) {
System.out.print(arr[i] + " ");
if (i % 20 == 0) System.out.println();
}
} // end main
} // end class
# 백준 스위치 켜고 끄기 java # BJ1244 java
728x90
'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > 백준 알고리즘' 카테고리의 다른 글
[BJ12891] DNA 비밀번호 (0) | 2022.08.08 |
---|---|
[BJ21921] 블로그 (0) | 2022.08.08 |
[BJ2309] 일곱 난쟁이 (0) | 2022.08.01 |
[BJ14889] 스타트와 링크 (0) | 2022.05.14 |
[BJ14888] 연산자 끼워넣기 (0) | 2022.05.11 |