알고리즘/BOJ

[BJ]1244. 스위치 켜고 끄기

  • -

 

 

https://www.acmicpc.net/problem/1244

* 일단 문제를 정독 하고 1시간 이상 반드시 고민이 필요합니다.

 

1시간 이상 고민 했지만 아이디어가 떠오르지 않는다면 동영상에서 약간의 힌트를 얻어봅시다.

 

동영상 설명을 보고도 전혀 구현이 안된다면 연습 부족입니다.
소스를 보고 작성해 본 후 스스로 백지 상태에서 3번 작성해 볼 의지가 있다면 소스를 살짝 보세요.

꼭 작성할 각오가 되어있습니다.
package bj.silver.l2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; import java.util.StringTokenizer; public class BJ_1244_S2_스위치켜고끄기 { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static StringTokenizer tokens; static StringBuilder output; public static void main(String[] args) throws NumberFormatException, IOException { br = new BufferedReader(new StringReader(src)); // 스위치 개수 int N = Integer.parseInt(br.readLine()); boolean[] switches = new boolean[N + 1]; tokens = new StringTokenizer(br.readLine()); // 인덱스가 1번부터 하고 있다 주의!! for (int i = 1; i <= N; i++) { switches[i] = Integer.parseInt(tokens.nextToken()) == 1; } // System.out.println("초기: " + Arrays.toString(switches)); // 학생 수 int S = Integer.parseInt(br.readLine()); for (int i = 0; i < S; i++) { tokens = new StringTokenizer(br.readLine()); int gender = Integer.parseInt(tokens.nextToken()); int idx = Integer.parseInt(tokens.nextToken()); // 남학생이면 배수 위치에 있는 스위치 반전 if (gender == 1) { // 배수만큼 증가하면서 스위치 반전시키기 for (int k = idx; k < switches.length; k += idx) { switches[k] = !switches[k]; } // System.out.println("남자 결과: " + Arrays.toString(switches)); } // 여학생이면 좌우로 대칭되는 지점을 찾아서 그 범위 내의 요소들 반전 else { switches[idx] = !switches[idx]; for (int l = idx - 1, r = idx + 1; l >= 1 && r <= N; l--, r++) { if (switches[l] == switches[r]) { switches[l] = switches[r] = !switches[r]; } else { break; } } } } // System.out.println("최종 결과: " + Arrays.toString(switches)); StringBuilder sb = new StringBuilder(); for (int i = 1; i < switches.length; i++) { sb.append(switches[i] ? 1 : 0).append(" "); // 20글자마다 다음 줄에 표현해야 한다. - 스위치는 100 이하의 정수 if (i % 20 == 0) { sb.append("\n"); } } System.out.println(sb); } private static String src = "8\r\n" + "0 1 0 1 0 0 0 1\r\n" + "2\r\n" + "1 3\r\n" + "2 3"; }

 

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.