728x90
1. 문제
https://www.acmicpc.net/problem/1244
스위치가 꺼져있으면 0, 켜져있으면 1이다.
남자는 1, 여자는 2다.
학생들은 1이상 스위치 개수 이하의 자연수를 받는다.
남학생은 본인 번호의 배수 스위치를 바꾼다.
여학생은 본인 번호 기준으로 양 옆이 대칭이 아니게 될 때까지 넓혀가면서 바꾼다.
2. 풀이
- 스위치 배열은 좀 더 편하게 코딩하기 위해 boolean으로 설정했다.
- 남학생=> 본인번호-1을 시작으로 배수마다 상태를 바꿔줬다.
- 여학생=> 본인번호-1을 먼저 바꿔준 뒤, idx = 1부터 스위치[본인번호-idx]!=스위치[본인번호+idx]일때까지 계속 바꿨다. 바꾸고 난 뒤에는 idx+1을 해 다음 비교를 할 수 있도록 했다.
import java.io.*;
import java.util.*;
public class BOJ_1244_스위치켜고끄기 {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(in.readLine());
st = new StringTokenizer(in.readLine());
boolean[] switches = new boolean[N];
for(int i=0;i<N;i++) switches[i] = st.nextToken().equals("1");
int number = Integer.parseInt(in.readLine());
for(int i=0;i<number;i++){
st = new StringTokenizer(in.readLine());
String gender = st.nextToken();
int num = Integer.parseInt(st.nextToken());
switch(gender){
case "1":
for(int j=num-1;j<N;j+=num) switches[j] = !switches[j];
break;
case "2":
num -= 1;
switches[num] = !switches[num];
int idx = 1;
while(num-idx>=0 && num+idx<N && switches[num-idx]==switches[num+idx]){
switches[num-idx] = !switches[num-idx];
switches[num+idx] = !switches[num+idx];
++idx;
}
break;
}
}
StringBuilder sb = new StringBuilder();
for(int i=0;i<N;i++){
if(switches[i]) sb.append(1);
else sb.append(0);
sb.append(" ");
if(i%20==19) sb.append("\n");
}
System.out.println(sb);
}
}
3. 결과
'코딩테스트 > BOJ' 카테고리의 다른 글
[BOJ] 2559 수열 - JAVA (0) | 2022.02.14 |
---|---|
[BOJ] 2304 창고 다각형 - JAVA (0) | 2022.02.14 |
[BOJ] 2628 종이자르기 - JAVA (0) | 2022.02.13 |
[BOJ] 2635 수 이어가기 - JAVA (0) | 2022.02.12 |
[BOJ] 10157 자리배정 - JAVA (0) | 2022.02.12 |
댓글