출력에서 많이 틀렸는데 join() 메서드에 익숙하지 않은거 같다.
join() 메서드는 배열의 모든 요소를 쉼표나 지정된 구분 문자열로 구분하여 연결한 새 문자열을 만들어 반환합니다.
let arr = ['사과', '바나나', '수박'];
let arrJoin1 = arr.join();
console.log(arrJoin1); // 사과,바나나,수박
let arrJoin2 = arr.join('');
console.log(arrJoin2); // 사과바나나수박
let arrJoin3 = arr.join('-');
console.log(arrJoin3); // 사과-바나나-수박
let result = [];
let arr = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23];
while (arr.length > 0) {
// 20개까지 자른 배열을 한칸 씩 띄운 문자열을 result에 push
result.push(arr.splice(0, 20).join(" "));
console.log("result", result);
}
// 배열 사이를 띄워서 하나의 문자열로 반환
console.log(result.join("\n"));
// 결과
// result [ '0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19' ]
// result [ '0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19', '20 21 22 23' ]
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
// 20 21 22 23
splice() 메소드는 원본을 깍아 먹기 때문에 arr.length가 0이 될때 까지 반복한다.
var fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");
const n = +input.shift();
// 스위치 상태
const states = input[0].split(" ").map(Number);
// 학생 수
const studentNum = +input[1];
// 학생 리스트
const studentList = input
.filter((v, i) => i > 1)
.map((v) => v.split(" ").map(Number));
// 스위치 토글
function toggle(state) {
return state === 0 ? 1 : 0;
}
function solution(n, states, studentNum, studentList) {
for (let i = 0; i < studentNum; i++) {
let gender = studentList[i][0];
let stuNum = studentList[i][1];
if (gender === 1) {
// 남학생일때 배수를 찾아 토글
for (let i = 1; i <= parseInt(n / stuNum); i++) {
let target = i * stuNum - 1;
states[target] = toggle(states[target]);
}
} else {
// 여학생 일때
let flag = 0;
// 학생이 받은 수 스위치 토글
states[stuNum - 1] = toggle(states[stuNum - 1]);
// 학생이 받은 수의 왼쪽 오른쪽
let rt = stuNum;
let lt = stuNum - 2;
// 끝에 도착하거나, 대칭이 아닐때 멈춤
while (flag === 0 && lt >= 0 && rt <= n) {
if (states[rt] === states[lt]) {
// 대칭일때 스위치 토글
states[rt] = toggle(states[rt]);
states[lt] = toggle(states[lt]);
// 이동
rt++;
lt--;
} else flag = 1;
}
}
}
// 20개 이상일때 출력
let result = [];
while (states.length > 0) {
result.push(states.splice(0, 20).join(" "));
}
console.log(result.join("\n"));
}
solution(n, states, studentNum, studentList);