[백준] 1244번: 스위치 켜고 끄기

ByWindow·2022년 3월 15일
0

Algorithm

목록 보기
91/104
post-thumbnail

📝문제

최근에 건강상의 문제로 태어나서 처음(내가 이런 걸로 아플 줄 몰랐던) 어떤 질환?을 갖게 되었는데 그래서 내일 수술을 하게 되었다. 그래서 오늘은 간단한 구현 문제를 풀어보았다.
문제에서 요구하는 것을 그대로 코드로 작성하면 된다.
구현방법은 푸는 사람에 따라 여러 가지 일 것이다.

📌코드

package Implementation;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ1244 {

  static int n; // # of switch
  static int[] sw; // switch

  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    n = Integer.parseInt(br.readLine());
    StringTokenizer st = new StringTokenizer(br.readLine());
    sw = new int[n+1]; // 스위치 번호를 인덱스로
    for(int i = 1; i <= n; i++){
      sw[i] = Integer.parseInt(st.nextToken());
    }
    int student = Integer.parseInt(br.readLine());
    for(int i = 0; i < student; i++){
      st = new StringTokenizer(br.readLine());
      int gender = Integer.parseInt(st.nextToken());
      int target = Integer.parseInt(st.nextToken());
      // boy
      if(gender == 1){
        // target의 배수에 해당하는 스위치의 상태를 변경
        for(int j = target; j < n+1; j+=target){
          sw[j] = sw[j] == 0 ? 1 : 0;
        }
      }
      // girl
      else {
        // target에 대해 최대 몇 번까지 대칭인지 판단하고 상태 변경
        for(int j = 0; target - j > 0 && target + j <= n; j++){
          if(sw[target+j] == sw[target-j]){
            // 대칭이라면 바로 변경
            sw[target+j] = sw[target+j] == 0 ? 1 : 0;
            sw[target-j] = sw[target-j] == 0 ? 1 : 0;
          }
          else break;
        }
        sw[target] = sw[target] == 0 ? 1 : 0;
      }
    }
    StringBuilder sb = new StringBuilder();
    for(int i = 1; i < n+1; i++){
      sb.append(sw[i]).append(" ");
      if(i % 20 == 0) sb.append("\n");
    }
    System.out.println(sb.toString());
  }
}
profile
step by step...my devlog

0개의 댓글