
중요한 점은 입력받은 값을 가지고 출력값을 도출 해야하는 점이다. 일부 문제들은 입력값을 직접 A또는 B로 할당해 주었다면, 이 문제는 콘솔창에서 입력된 값을 코드 로직에 가져와서 담고, 이를 더해 다시 출력해 줘야한다.
A+B와 같은 매우 간단해 보이는 문제에서 나는 내 짧은 배움을 볼 수 있었다. 지금까지 API를 이용해 프론트에서 값을 받아서 결과를 return해주는 작업을 주로 했었지, 콘솔창에서 백엔드가 입력을 받을 일이 얼마나 있었을까.... 나는 아직 그런경험이 없었기에 처음에 조금 당황했다.
//JS 오답 1
const sum = (input) => {
numberArray = input.split(" ")
const A = +numberArray[0]
const B = +numberArray[1]
console.log(A+B)
} 그래서 node에서 콘솔입력값을 얻는 방법을 찾아보니 process.stdin.on("data" , () => {})과 같은 방법이 있었다.
이는 데이터를 수신할 때 마다 호출되는 이벤트 리스너로, 콘솔창에 data가 들어오면 자동으로 실행된다.
//JS 오답 2
const sum = (input) => {
numberArray = input.split(" ")
const A = +numberArray[0]
const B = +numberArray[1]
console.log(A+B)
}
process.stdin.on('data',(input) => { sum(input) }) 이 방법은 TypeError를 뱉어냈다. process.stdin.on 의 input에 대한 타입은 Buffer타입이기 때문에 바꿔줘야 하더라.//JS 정답 1
const sum = (input) => {
numberArray = input.split(" ")
const A = +numberArray[0]
const B = +numberArray[1]
console.log(A+B)
}
process.stdin.on('data',(input) => { sum(input.toString()) })풀고나서 다른사람들의 정답을 확인해 보니 예제도 그렇고 대다수의 문제풀이는 fs라는 내부모듈을 불러와 푸는 방식이었다.
다른 정답
//JS 정답 2
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split(' ');
const a = parseInt(input[0]);
const b = parseInt(input[1]);
console.log(a+b);
C#으로 문제를 풀 때는 위에서 얻은 정보를 바탕으로 입력값을 받는 방법을 찾고 실행하였으나 처음엔 고비를 마셨다.
//C# 오답
class Program{
static void Main(){
string input = Console.ReadLine();
string[] numbers = input.Split(" ");
int A = (int)numbers[0];
int B = (int)numbers[1];
int result = A + B;
Console.WriteLine(result);
}
}
문제는 int A = (int)numbers[0]; 의 Type에러 발생이다. 변환할 변수앞에 (Type)으로 변환하는 방식은 같은 기본형(int. float, double, short 등)에서만 동작하는 방식이라는 점을 찾고 문자를 숫자로 변환하기 위해 int.Prase()를 사용했다.
//C# 정답
class Program{
static void Main(){
string[] inputs = Console.ReadLine().Split(" ");
int A = int.Parse(inputs[0]);
int B = int.Parse(inputs[1]);
int result = A + B;
Console.WriteLine(result);
}
}예시 또한 크게 내 정답과 다르진 않았다.