1. Node.js로 입력받기

a. 보통 Node.js에서 입력은 readline 모듈을 사용해 console을 통해 받을 수 있다.

b. 하지만, txt file을 읽어서 입력을 처리할 수도 있음(fs module) 사용

 

구름에서는 a번 방식을 사용하고, 백준에서는 b번으로 입력하는 것이 공식적으로 권장된다.

 

백준에서 문제 풀 때, 사이트에서 바로 테스트를 할 수가 없어 불편하다.

그래서 로컬에서 백준 식 입력 방법으로 테스트하는 방법을 공유한다.

 

1. 예시 파일.txt 생성

2. 아래 방식으로 예시 파일 read

// BOJ에 제출할 때는 경로를 "/dev/stdin"으로 바꿔주기!
// readFileSync method 이후 부분은 필요에 맞게 편집
const input = require("fs").readFileSync("ex.txt").toString().trim().split(/\s/);

 

 

https://velog.io/@exploit017/%EB%B0%B1%EC%A4%80Node.js-Node.js-%EC%9E%85%EB%A0%A5-%EB%B0%9B%EA%B8%B0

 

[백준/Node.js] Node.js 입력 받기

일반적으로 JS에서는 prompt로 입력을 받았으나, 백준에서는 런타임 오류가 발생한다.검색해보니 Node.js의 realine 모듈을 import해서 사용해야했다.소스 코드는 다음과 같다.console.log(answer);에 의해 입

velog.io

https://grap3fruit.dev/blog/%EA%B5%AC%EB%A6%84(goorm),-%EB%B0%B1%EC%A4%80(BOJ)-%EC%BD%94%EB%94%A9-%ED%85%8C%EC%8A%A4%ED%8A%B8-JavaScript%EB%A1%9C-%EC%9E%85%EB%A0%A5%EB%B0%9B%EB%8A%94-%EB%B0%A9%EB%B2%95-%EC%A0%95%EB%A6%AC 

 

구름(goorm), 백준(BOJ) 코딩 테스트 JavaScript로 입력받는 방법 정리

최근 프론트엔드(FE)직무로 취업을 준비하면서, 몇몇 기업은 코딩테스트(이하 코테) 언어를 JavaScript로 제한하는 경우가 있었다. 이를 대비해 JavaScript로 알고리즘 문제들을 풀어보면서 느낀 점은

grap3fruit.dev

 

https://nyang-in.tistory.com/156

 

[백준]백준에서 node.js 입출력 방법 정리(백준/자바스크립트/코딩테스트/알고리즘)

안녕하세요. 이번 시간에는 백준에서 node.js 입출력 방법에 대해 알아보겠습니다. 자바스크립트로 코딩테스트를 준비할 경우, 백준에서는 node.js를 선택하여야 합니다. 그런데 node.js가 좀 번거롭

nyang-in.tistory.com

 

 

2. OBJ 1620 해결

문제 → https://www.acmicpc.net/problem/1620

 

Lesson Learned

  • 자료형간의 관계를 생각하자
    • 배열 →  index & value
    • Map → key & value
  • Map or Object의 key 값에 접근하는 것은 시간이 많이 들기에 최대한 다른 방법을 생각해보자
  • 처음 짠 코드
    • Map → [key: number, value: string]의 형식으로 짬
      • 한계: 입력이 string일 경우, Map의 key인 index를 get 해야 하는데 index의 key 값을 받아오는 로직에 드는 시간이 길었음
  • 모범답안
    • value: string는 array를 활용해 접근할 수 있으니까, 시간이 많이드는 index 값을 Map의 value로 사용하자
    • if typeof 값 === string → Map.get(값) → index 출력
    • if typeof 값 === number → array를 활용해 string 출력

 

답안👇🏻

const input = require("fs").readFileSync("/dev/stdin").toString().split(/\s/);

const n = +input[0];
const pokeArr = input.slice(2, n + 2);
const questions = input.slice(n + 2)

const pokemonMap = new Map(pokeArr.map((v, i) => [v, i + 1]))
const result = []

questions.forEach((v) => {
  if (Number.isNaN(+v)) result.push(pokemonMap.get(v))
  else result.push(pokeArr[+v - 1])
})

console.log(result.join("\n"))

시행착오👇🏻 (결과는 맞으나 "시간초과" 뜸)

const input = require("fs").readFileSync("/dev/stdin").toString().split(/\s/);

const n = +input[0];
const pokeArr = input.slice(2, n + 2);
const questions = input.slice(n + 2)

const pokemonMap = new Map(pokeArr.map((v, i) => [i + 1, v]))
const result = []

for (let i in questions) {
  // 영어인 경우 -> 숫자 출력
  if (Number.isNaN(+questions[i])) {
    pokemonMap.forEach(((value, key) => {
      if (value === questions[i]) result.push(key)
    }))
  }
  // 숫자인 경우 -> 영어 출력
  else {
    result.push(pokemonMap.get(+questions[i]))
  }
}

console.log(result.join("\n"))

+ Recent posts