BOJ 백준 1244번 스위치 켜고 끄기 | Java
🔎 문제 설명
🩶 실버 4
- 난이도 ★☆☆☆ - 구현/시뮬레이션
가볍게 손풀기로 풀려고 했지만 생각보다 오래 걸렸던 문제라 기록을 남긴다. 어렵진 않지만 문제를 생각보다 잘 이해해야 하는 문제로, 질문 게시판에 많은 사람들이 도움을 요청하는 모습을 볼 수 있다. 정답 비율이 무려 20%라구..
문제에서 헷갈릴 만한 포인트들을 정리해서 남길테니 혹시라도 이 글을 찾아본 다른 사람에게 도움이 되었으면 좋겠다!
💡 문제 이해 포인트
- 문제 출력 형식: 스위치 상태를 20개씩 끊어서 출력해야 함
- 여학생이 자신이 받은 번호로부터 좌우가 대칭인 스위치 범위까지 스위치 상태를 바꾼다.
- 자신이 받은 번호는 항상 스위치 상태를 바꾼다
추가로 내가 문제 풀이에 도움이 되었던 반례를 아래에 첨부하였다. 위의 문제 이해 포인트를 모두 알맞게 적용했음에도 여전히 안 된다면 남학생 코드에서 놓치고 있는 포인트가 있을 수 있다.
💻 내 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main_1244_S4_스위치_켜고_끄기 {
static int N, switches[];
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
switches = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) switches[i] = Integer.parseInt(st.nextToken());
int t = Integer.parseInt(br.readLine());
int gender, num;
for (int i = 0; i < t; i++) {
st = new StringTokenizer(br.readLine());
gender = Integer.parseInt(st.nextToken());
num = Integer.parseInt(st.nextToken());
operateSwitch(gender, num);
}
for (int j = 0; j < N; j++) {
System.out.print(switches[j] + " ");
if ((j + 1) % 20 == 0) System.out.println();
}
}
private static void operateSwitch(int gender, int num) {
if (gender == 1) {
for (int i=num; i<=N; i+=num) switches[i-1] ^= 1;
return;
}
switches[--num] ^= 1;
for (int i=1; i<N; i++) {
if (0>(num-i) || (num+i)>=N) break;
if (switches[num+i]!=switches[num-i]) break;
switches[num + i] ^= 1;
switches[num - i] ^= 1;
}
}
}
/*
반례
8
0 1 0 1 0 0 0 1
2
1 8
2 7
*/
💙 You need to log in to GitHub to write comments. 💙
If you can't see comments, please refresh page(F5).