본문 바로가기
백준 알고리즘

백준 [1244] 스위치 켜고 끄기 - JavaScript 풀이

by 코딩사무소장 2025. 2. 5.
반응형

오랜만에 백준으로 알고리즘 문제를 풀었습니다.

 

해당 문제는 조건을 제대로 설정하면 쉽게 풀 수 있습니다.

 

 

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

 

 

접근 방법

1. 입력받은 정보를 변수에 저장합니다.

2. 학생 수 만큼 for문을 순회하여 학생의 정보를 하나씩 사용합니다.

3. 성별이 남자일 때 주어진 스위치 번호부터 배수를 변경합니다.

4. 성별이 여자일 때 주어진 스위치 번호부터 좌우의 숫자가 같을 경우 숫자를 변경합니다.

5. 해당 배열을 20개씩 한 줄에 출력합니다.

 

구현 방법

1. 입력받은 정보를 변수에 저장합니다.

const input = require("fs")
  .readFileSync("/dev/stdin")
  .toString()
  .trim()
  .split("\n");

const number = Number(input.shift());
let arr = input.shift().split(" ").map(Number);

 

2. 학생 수 만큼 for문을 순회합니다.

input.forEach((el) => {
  const [gender, switchNumber] = el.split(" ").map(Number);
  // ...
}


3. 성별이 남자일 때 주어진 스위치 번호부터 배수를 변경합니다.

  if (gender === 1) {
    for (let i = switchNumber; i <= number; i += switchNumber) {
      arr[i - 1] = changeNumber(arr[i - 1]);
    }
  }

 

4. 성별이 여자일 때 주어진 스위치 번호부터 좌우의 숫자가 같을 경우 숫자를 변경합니다.

else {
    let num = 0;
    while (
      switchNumber - num - 1 >= 0 &&
      switchNumber + num - 1 < number &&
      arr[switchNumber - num - 1] === arr[switchNumber + num - 1]
    ) {
      arr[switchNumber - num - 1] = changeNumber(arr[switchNumber - num - 1]);
      arr[switchNumber + num - 1] = changeNumber(arr[switchNumber + num - 1]);
      num++;
    }
    arr[switchNumber - 1] = changeNumber(arr[switchNumber - 1]);
}

 

5. 해당 배열을 20개씩 한 줄에 출력합니다.

for (let i = 0; i < arr.length; i += 20) {
  console.log(arr.slice(i, i + 20).join(" "));
}

 

전체 코드

const input = require("fs")
  .readFileSync("/dev/stdin")
  .toString()
  .trim()
  .split("\n");

const number = Number(input.shift());
let arr = input.shift().split(" ").map(Number);

const changeNumber = (num) => (num === 1 ? 0 : 1);

input.forEach((el) => {
  const [gender, switchNumber] = el.split(" ").map(Number);

  if (gender === 1) {
    for (let i = switchNumber; i <= number; i += switchNumber) {
      arr[i - 1] = changeNumber(arr[i - 1]);
    }
  } else {
    let num = 0;
    while (
      switchNumber - num - 1 >= 0 &&
      switchNumber + num - 1 < number &&
      arr[switchNumber - num - 1] === arr[switchNumber + num - 1]
    ) {
      arr[switchNumber - num - 1] = changeNumber(arr[switchNumber - num - 1]);
      arr[switchNumber + num - 1] = changeNumber(arr[switchNumber + num - 1]);
      num++;
    }
    arr[switchNumber - 1] = changeNumber(arr[switchNumber - 1]);
  }
});

for (let i = 0; i < arr.length; i += 20) {
  console.log(arr.slice(i, i + 20).join(" "));
}

 

이런 방식으로 구현하면 됩니다.

 

이상 백준 1244번 스위치 켜고 끄기 자바스크립트 풀이였습니다.

 

 

반응형