[BOJ] 1244 스위치 켜고 끄기
시뮬레이션 예제
문제
https://www.acmicpc.net/problem/1244
문제 풀이
package Baekjoon.Simulation;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
/**
* Created by kyeahen.
* Title : 1244 스위치 켜고 끄기
* Category : 시뮬레이션
* Date: 2021/06/02
*/
public class BJ_1244 {
static int switchNum, studentNum;
static int[] status;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
switchNum = Integer.parseInt(br.readLine());
status = new int[switchNum + 1];
st = new StringTokenizer(br.readLine());
for (int i = 1; i <= switchNum; i++) {
status[i] = Integer.parseInt(st.nextToken());
}
studentNum = Integer.parseInt(br.readLine());
while (studentNum-- > 0) {
st = new StringTokenizer(br.readLine());
//남학생은 배수, 여학생은 좌우 대칭이면 바꾸기, 아니면 자기만
int gender = Integer.parseInt(st.nextToken());
int num = Integer.parseInt(st.nextToken());
if (gender == 1) { //남자
for (int i = num; i <= switchNum; i += num) {
if (status[i] == 0) { status[i] = 1; }
else { status[i] = 0; }
}
}
if (gender == 2) { //여자
if ((num == 1 || num == switchNum) || status[num - 1] != status[num + 1]) { //범위 초과 or 대칭x
if (status[num] == 0) { status[num] = 1; }
else { status[num] = 0; }
} else {
if (status[num] == 0) { status[num] = 1; }
else { status[num] = 0; }
int left = num - 1;
int right = num + 1;
while (left > 0 && right <= switchNum) {
if (status[left] == status[right]) { //대칭
if (status[left] == 0) {
status[left] = status[right] = 1;
} else {
status[left] = status[right] = 0;
}
--left;
++right;
} else {
break;
}
}
}
}
}
for (int i = 1; i <= switchNum; i++) {
System.out.print(status[i] + " ");
if (i % 20 == 0) {
System.out.println();
}
}
}
}
TMI
21/06/02: 알고리즘 스터디 문제 풀이🤓
댓글남기기