반응형
오랜만에 백준으로 알고리즘 문제를 풀었습니다.
해당 문제는 조건을 제대로 설정하면 쉽게 풀 수 있습니다.
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번 스위치 켜고 끄기 자바스크립트 풀이였습니다.
반응형
'백준 알고리즘' 카테고리의 다른 글
백준 2869번 파이썬 (0) | 2023.07.22 |
---|---|
백준 5622 다이얼 - 자바 풀이 (0) | 2023.05.30 |
백준 2738 행렬 덧셈 - 자바 풀이 (0) | 2023.05.30 |
백준 [27866] 문자와 문자열 - 자바 풀이 (0) | 2023.05.25 |
백준 [2744] 대소문자 바꾸기 - 자바 풀이 (0) | 2023.05.25 |