백준 1244 js [실버4]

인지용·2024년 11월 6일
0

알고리즘

목록 보기
8/46
post-thumbnail
const input = require('fs')
    .readFileSync(process.platform === 'linux' ? 0 : './data.txt')
    .toString()
    .split('\n');

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

for(let i=0; i<studentsCount; i++) {
    const [sex, num] = input[i].split(" ").map(Number);

    if(sex == 1){
        manCalculate(arr, num)
    }else{
        girlCalculate(arr, num)
    }
}

let output = '';
arr.forEach((data, index) => {
    output += data + ' ';

    if ((index + 1) % 20 === 0) {
        output += '\n';
    }
})

console.log(output)

function manCalculate(arr, num) {
    for(let i=1; i<=arr.length; i++) {
        //배수인 경우
        if(i % num == 0) {
            arr[i-1] = arr[i-1] == 1 ? 0 : 1;
        }
    }
}

function girlCalculate(arr, num) {
    let isDone = false;
    let left = num-2;
    let right = num;
    arr[num-1] = arr[num-1] == 1 ? 0 : 1;

    while(!isDone){
        if(left < 0 || right >= arr.length) {
            isDone = true;
            break;
        }

        if(arr[left] != arr[right]) {
            isDone = true;
            break;
        }

        arr[left] = arr[left] == 1 ? 0 : 1;
        arr[right] = arr[right] == 1 ? 0 : 1;

        left--;
        right++;
    }
}

문제 자체가 크게 어렵진 않았던 것 같은데 문제를 제대로 읽지 않아서 시간이 좀 걸렸다. 20개씩 줄바꿈 후 출력해야 하는데 그걸 못읽고 왜 정답인데 안되지?.. 계속 이러고 반례 찾아보고 있었다.

이번 문제의 교훈 문제도 좋지만 입력,출력 설명도 꼼꼼히 읽을것!

profile
한-줄

0개의 댓글