[알고리즘][X] 스위치 켜고 끄기
2024. 1. 30. 16:58ㆍ알고리즘 풀이/Java
https://www.acmicpc.net/problem/1244
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
int[] switches = new int[N];
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < N; i++) {
switches[i] = Integer.parseInt(st.nextToken());
}
int humanNumber = Integer.parseInt(br.readLine());
for (int i = 0; i < humanNumber; i++) {
st = new StringTokenizer(br.readLine(), " ");
int sex = Integer.parseInt(st.nextToken());
int switchNumber = Integer.parseInt(st.nextToken());
controlSwitch(switches, sex, switchNumber);
}
for (int i = 1; i <= switches.length; i++) {
System.out.print(switches[i-1] + " ");
if (i != 0 && i % 20 == 0) {
System.out.println();
}
}
}
private static void controlSwitch(int[] switches, int sex, int switchNumber) {
if (sex == 1) {
controlSwitchMale(switches, switchNumber);
return;
}
if (sex == 2) {
controlSwitchFemale(switches, switchNumber);
return;
}
}
private static void controlSwitchMale(int[] switches, int switchNumber) {
for (int i = switchNumber; i <= switches.length; i++) {
if (i % switchNumber == 0) {
switches[i - 1] = Math.abs(1 - switches[i - 1]);
}
}
}
private static void controlSwitchFemale(int[] switches, int switchNumber) {
switchNumber -= 1;
switches[switchNumber] = Math.abs(1 - switches[switchNumber]);
for (int i = 1; i < switches.length; i++) {
int index1 = switchNumber - i;
int index2 = switchNumber + i;
if (!(index1 >= 0 && index2 < switches.length
&& switches[index1] == switches[index2])) {
break;
}
switches[index1] = Math.abs(1 - switches[index1]);
switches[index2] = Math.abs(1 - switches[index2]);
}
}
}
나의 풀이
- 문제에서는 스위치가 1부터 시작하는데 난 배열 0부터 저장하다보니 굉장히 번거러웠다.
- 그것 때문에 디버깅도 어려웠다.
- 이로부터 배운 교훈은 1부터 시작하면 웬만하면 1로 맞춰주자!!!
'알고리즘 풀이 > Java' 카테고리의 다른 글
[알고리즘] 암호생성기 (0) | 2024.02.02 |
---|---|
[알고리즘][X] LCS 2 (0) | 2024.01.31 |
[알고리즘] 재귀를 통한 순열 (0) | 2024.01.30 |
[알고리즘] Flatten (1) | 2024.01.30 |
[알고리즘] 하노이탑 알고리즘 (0) | 2024.01.30 |