https://www.acmicpc.net/problem/1244
첫째 줄에는 스위치 개수 int [1, 100]
둘째 줄에는 각 스위치의 상태가 주어진다.
셋째 줄에는 학생 수 int [1, 100]
넷째 줄부터 마지막 줄까지 한 줄에 한 학생의 성별, 학생이 받은 수
스위치의 상태를 1번 스위치에서 시작하여 마지막 스위치까지 한 줄에 20개씩 출력
예를 들어 21번 스위치가 있다면 이 스위치의 상태는 둘째 줄 맨 앞에 출력한다. 켜진 스위치는 1, 꺼진 스위치는 0으로 표시하고, 스위치 상태 사이에 빈칸을 하나씩 둔다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 스위치 개수
int switchCnt = Integer.parseInt(br.readLine());
int[] switchInfo = new int[switchCnt+1];
StringTokenizer st;
// 스위치 정보
st = new StringTokenizer(br.readLine(), " ");
for(int i=1; i<=switchCnt; i++) {
switchInfo[i] = Integer.parseInt(st.nextToken());
}
StringBuilder sb = new StringBuilder();
// 학생 수
int studentCnt = Integer.parseInt(br.readLine());
while(studentCnt-- > 0) {
st = new StringTokenizer(br.readLine(), " ");
int sex = Integer.parseInt(st.nextToken());
int index = Integer.parseInt(st.nextToken());
if(sex == 1) {
// 남자라면
for(int i=1; i<=switchCnt; i++) {
if(i % index == 0) {
switchInfo[i] = switchInfo[i] == 0 ? 1 : 0;
}
}
} else if(sex == 2) {
// 여자라면
switchInfo[index] = switchInfo[index] == 0 ? 1 : 0;
int left = index - 1;
int right = index + 1;
while(left > 0 && right <= switchCnt && switchInfo[left] == switchInfo[right])
{
switchInfo[left] = switchInfo[left] == 0 ? 1 : 0;
switchInfo[right] = switchInfo[right] == 0 ? 1 : 0;
left--;
right++;
}
}
}
// 20개씩 출력
//한 줄에 20개씩 출력
sb = new StringBuilder();
for(int i=1; i<=switchCnt; i++) {
sb.append(switchInfo[i]+" ");
if(i % 20 == 0) sb.append("\n");
}
System.out.println(sb);
}
}