JavaScript로 Baekjoon 문제 풀기

G_NooN·2024년 1월 2일
0

Algorithms

목록 보기
4/33

알고리즘 문제 해결 시도 (Baekjoon)

Programmers의 문제들을 접해보고, 갑자기 다른 사이트들의 문제 구성이 궁금했다.
그래서 Baekjoon 사이트를 들어가 기초 문제를 몇 개 풀어보기로 했다.

JavaScript가 없다...??

문제를 풀기 위해 언어 선택을 하려는데 아무리 찾아봐도 JavaScript가 보이지 않았다.
JavaScript를 사용하여 문제를 해결하기 위해선 node.js를 사용하여 작성해야 했다.

당황스러웠다. 왜일까?

당연히 JavaScript도 프로그래밍 언어니까 가능할 줄 알았다.
왜 문제를 해결할 때 JavaScript가 아닌 node.js를 사용해야 하는지 곰곰히 생각해보았다.

입력값을 받는 방법

문제를 해결하는 과정은 함수에 임의의 값을 입력 받아 결과값을 출력하는 것이다.

여기서 중요한 포인트는 임의의 값을 어떻게 받느냐 였다.

C는 scanf, Java는 Scanner, Python은 input을 사용하여 자체적으로 값을 입력받을 수 있었다.

하지만, JavaScript는 달랐다.

JavaScript는 브라우저에서 input 태그를 사용하거나, prompt() 메서드를 사용하여 값을 입력받았다.

따라서, 자체적으로 값을 입력 받기 위해서는 node.js의 readline 모듈을 이용해야 했다.


readline 모듈 사용법

// readline 모듈 불러오기
const readline = require('readline');

// readline 모듈을 사용하여 입출력 인터페이스 객체 생성
const rl = readline.createInterface({
  input: process.stdin,		// 입력 (stdin = standard input)
  output: process.stdout,	// 출력 (stdout = standard output)           
});

값을 입력받고 출력하는 방법

// input 값을 저장하는 변수
let input = [];

// on 메서드 : 이벤트가 발생했을 때 실행할 동작을 설정함
// line 이벤트 : 입력 받은 값을 한 줄씩 읽어 문자열로 전달하는 이벤트. 
rl.on('line', (line) => {
  // 입력 받은 값을 처리하는 코드
  // (Ex. 공백을 사용하여 여러 개의 값을 입력 받는 코드 (a b c))
  input = line.split(' ');
  // rl.close();
});

// close 이벤트 : 콘솔에서 Ctrl+C를 입력하거나 입력 인터페이스에서 rl.close()를 사용한 경우에 발생하는 이벤트
// close 이벤트를 실행하지 않으면 입력 이벤트가 무한히 실행됨
rl.on('close', () => {
  // 입력이 완료된 후에 실행하는 코드
  // (Ex. 입력된 값을 출력하는 코드)
  input.forEach((element) => {
    console.log(element);
  })
  // 입출력 인터페이스 종료
  process.exit();
});

결론

  1. JavaScript는 브라우저를 통해 입력이 이루어진다.
  2. 콘솔을 사용하여 입력을 하려면 node.js의 readline 모듈을 사용해야 한다.
  3. Baekjoon보다는 Programmers 문제에 집중하자...
profile
쥐눈(Jin Hoon)

0개의 댓글