[알고리즘][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