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
구름(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 값을 받아오는 로직에 드는 시간이 길었음
- Map → [key: number, value: string]의 형식으로 짬
- 모범답안
- 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"))
'TIL(Today I Learned) > 2021년' 카테고리의 다른 글
09.26 - 백준 14425 node.js 풀이 + 공부 필요 내용 (0) | 2021.10.01 |
---|---|
09.30 Velog Front 코드 훑어보기 (0) | 2021.09.30 |
09.24 > getter & setter in ES6 (0) | 2021.09.24 |
09.23 - JS > Map & Object (0) | 2021.09.23 |
09.21 - LeetCode1_twoSum / Map & Object / Set & Array (0) | 2021.09.21 |