1. 문제
https://www.acmicpc.net/problem/1244
2. 풀이과정
반복문으로 전체 학생들(operations[]) 순회시킴
- 만약 남자(1)이라면 번호를 배수로 증가시키고 그때 인덱스는 번호 - 1로 접근하여 값을 뒤집는다.
- 만약 여자(2)라면 번호 - 1위치 뒤집고 좌우로 지속적으로 확인하면서 같은 경우라면 값을 뒤집음.
다른 값이 나온다면 break 시킨다.
🚨주의 할 점
출력시 20개씩마다 줄바꿈을 해주어야함!!
3. 자바스크립트 정답코드
const fs = require('fs')
const filepath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const input = fs.readFileSync(filepath).toString().split('\n');
const n = +input[0];
let arr = input[1].split(' ').map(Number);
const m = +input[2];
let operations = [];
for (let i = 0; i < m; i++) {
let operation = input[3 + i].split(' ').map(Number);
operations.push(operation);
}
function changeArr(){
for(let i = 0; i< m; i++){
const gender = operations[i][0];
const num = operations[i][1];
if(gender == 1){
for (let j = num; j <= n; j += num)
{
arr[j - 1] = arr[j - 1] === 1 ? 0 : 1;
}
}
else if(gender == 2){
let index = num - 1;
arr[index] = arr[index] === 1 ? 0 : 1;
for (let j = 1; index - j >= 0 && index + j < n; ++j)
{
if (arr[index - j] == arr[index + j])
{
arr[index - j] = arr[index - j] === 1 ? 0 : 1;
arr[index + j] = arr[index + j] === 1 ? 0 : 1;
}
else
{
break;
}
}
}
}
}
function PrintResult()
{
let result = '';
for (let i = 0; i < n; i++) {
result += arr[i] + ' ';
if ((i + 1) % 20 === 0) {
result += '\n';
}
}
console.log(result.trim());
}
changeArr();
PrintResult();
4. 새로 알게된 점
출력시 console.log로 하나씩 찍을려고 했는데 문자열 하나를 선언하고 거기에 출력결과를 담아서 최종 답을 출력하는 방법도 있다는 것을 알게되었다.
추가로 문제를 자세히 읽어 예외처리를 잘하자!!
'🏆 PS(Problem Solving) > Baekjoon' 카테고리의 다른 글
[Node.js] 백준 Javascript 21608 상어 초등학교 (0) | 2024.06.04 |
---|---|
[Node.js] 백준 Javascript 20436 ZOAC 3 (1) | 2024.06.03 |
[C++] 백준 4396 지뢰 찾기 (0) | 2024.06.01 |
[Node.js] 백준 Javascript 4396 지뢰 찾기 (0) | 2024.06.01 |
[Node.js] 백준 javascript 2578 빙고 (0) | 2024.05.30 |