728x90
반응형
문제
https://www.acmicpc.net/problem/1244
풀이 방법
스위치의 상태를 바꿔주는 문제이다.
여학생인지 남학생인지 판단 후에 남학생이라면 해당 번호의 배수에 해당하는 인덱스를 가진 스위치를 토글해주고, 여학생이라면 해당 번호의 스위치를 우선 변경 후 , -1 +1를 위치에 있는 스위치가 같은지 여부를 판단 후, 같다면 토글해주고 같지 않다면 토글하지 않는 식으로 구현했다.
제출 코드
import java.io.*;
import java.util.*;
public class BJ_1244_스위치켜고끄기 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
int[] switchs = new int[N + 1];
st = new StringTokenizer(br.readLine());
for (int i = 1; i <= N; i++) {
switchs[i] = Integer.parseInt(st.nextToken());
}
int S = Integer.parseInt(br.readLine());
for (int i = 0; i < S; i++) {
st = new StringTokenizer(br.readLine());
int sex = Integer.parseInt(st.nextToken());
int num = Integer.parseInt(st.nextToken());
if (sex == 1) { // 남자인 경우
for (int j = 1; j <= N; j++) {
int db = j * num; // 배수 구하기
if (db > N)
break; // 배수가 스위치번호를 넘어가면 반복문 종료
switchs[db] = Math.abs(switchs[db] - 1); // 토글
}
} else { // 여자인 경우
switchs[num] = Math.abs(switchs[num] - 1); // 자기 번호 토글
int r=1;
while (true) {
if (num - r >= 1 && num + r <= N && switchs[num - r] == switchs[num + r]) {
switchs[num - r] = Math.abs(switchs[num - r] - 1);
switchs[num + r] = Math.abs(switchs[num + r] - 1);
r++;
}else break;
}
}
}
for (int i = 1; i <=N; i++) {
sb.append(switchs[i]);
if(i%20==0) sb.append("\n");
else sb.append(" ");
}
System.out.println(sb);
}
}
728x90
반응형
'알고리즘 > BJ' 카테고리의 다른 글
[BJ] 백준 2304 창고 다각형 (JAVA) (0) | 2022.03.01 |
---|---|
[BJ] 백준 15683 감시 (JAVA) (0) | 2022.02.28 |
[BJ] 백준 10026 적록색약 (JAVA) (0) | 2022.02.23 |
[BJ] 백준 2669 직사각형 네 개의 합집합의 면적구하기 (JAVA) (0) | 2022.02.22 |
[BJ] 백준 1759 암호만들기 (JAVA) (0) | 2022.02.22 |