All Articles

[NodeJS] 자바스크립트로 백준문제 입력받기 총 정리

<작성중>

입력 받기 위해 필수적으로 필요한 코드

  • 아래에서 언급되는 input 백틱 문자열 부분을 변경해 줘야합니다.
const fs = require('fs') // 파일시스템 불러오기
// 입력부를 스트링으로 불러와서 트림으로 앞뒤 공백을 제거해 줘야합니다.
// 이후 이 input에서 받아올 데이터들을 정리합니다.
// 하단에서 언급되는 백틱 내부 문자열 부분을 아래의 코드처럼 변경 해줘야 합니다
let input = fs.readFileSync('/dev/stdin').toString().trim()

숫자

// 단일 숫자 8
let input = Number(fs.readFileSync('/dev/stdin').toString().trim())

// 공백을 둔 복수 8 8 8
let input = fs.readFileSync('/dev/stdin').toString().trim().split(' ').map(_ => Number(_))

문자열

let input = `1 
the cat chased the rat while
the dog chased the cat into the rat house`.toString().split('\n')

const N = input.shift() //테스트 케이스
const S = input.map( e => e.split(' ')) 

처음 테스트케이스 갯수를 모를 때

  1. 마지막 배열의 원소가 0 0 일 때 종료
let input = `1 1
0
2 2
0 1
1 0
3 2
1 1 1
1 1 1
5 4
1 0 1 0 0
1 0 0 0 0
1 0 1 0 1
1 0 0 1 0
5 4
1 1 1 0 1
1 0 1 0 1
1 0 1 0 1
1 0 1 1 1
0 0`.toString().trim().split('\n')  // 줄바꿈으로 문자열을 쪼개줍니다.

입력 부분 문자열을 배열화 하여, shift() 연산을 통해 배열 길이를 줄여주며, 최종적으로 길이가 0이 될 때 까지 반복합니다. 하지만 모든 테스트케이스의 종료 시점이 0 0 임을 나타내기에, 반복문 안에 조건을 주어 return 하여 종료 해주어야 합니다. (종료를 해주지 않으면 백준에서 런타임 에러가 뜹니다.)

while(input.length) // 입력 총 길이만큼 반복한다
{
    // W 원소개수, H 테스트케이스 개수
    let [W, H] = input.shift().split(' ').map(_ => Number(_))
    // 0 0 일 때 입력 종료
    if (w === 0 && H === 0) return
    let tests = []
    
    // H만큼 돌면서 테스트 케이스들을 추가해준다
    for(let _ =0; _ < H; _ ++)
    {
         tests.push(input.shift().split(' ').map(_ => Number(_)))
    }
    // 여기서 해당 케이스의 함수를 작성하며, 바로 출력을 해주면 된다.
    
}
  1. 원소 개수/ 배열/ 테스트케이스
let input = `18 
1 1 1 2 1 1 2 3 3 2 1 1 1 1 2 2 1 1
6
1 2
2 6
3 9
7 10
8 16
13 18`.toString().trim().split('\n')

// n = 18  원소의 개수, t = 6 테스트케이스 개수
// 각 테스트 케이스 배열화
const [n,t] = [input[0],input[2]].map( _ => Number(_))
const nums = input[1].split(' ').map( _ => Number(_))