47일차 - 2022.04.18

Baekjoon에서 문제풀이


1) 문제 : 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10) 각 테스트 케이스마다 "Case #x: "를 출력한 다음, A+B를 출력한다. 테스트 케이스 번호는 1부터 시작한다.


고민과정
앞의 문제와 크게 다른점은 보이지 않는데 문자열로 한번에 출력하기 위한 a 정의 과정에 집중함.


풀이
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');

let a = "";
const T = parseInt(input[0]);

for (let i=1 ; i <= T; i++) {
    let A = parseInt(input[i].split(' ')[0]);
    let B = parseInt(input[i].split(' ')[1]);
    
    a += 'Case #' + i + ': ' + `${A+B}` + '\n'; 
}

console.log(a);

  1. readline모듈
const readline = require('readline');

const rl = readline.createInterface({
    input : process.stdin,
    output : process.stout,
});

const input = [];

rl.on('line', function(line) {
    input.push(line);
    
}).on('close', function() {

let a = "";
const T = parseInt(input[0]);

for (let i=1 ; i <= T; i++) {
    let A = parseInt(input[i].split(' ')[0]);
    let B = parseInt(input[i].split(' ')[1]);
    
    a += 'Case #' + i + ': ' + `${A+B}` + '\n'; 
}

console.log(a);
    
     process.exit();
});

밑의 문제와 같이 조건문은

if( 0 < A,B < 10) {
    a += 'Case #' + i + ': ' + `${A+B}` + '\n'; 
}}

해당 변수가 선언되어있는 곳에서 사용하면 문제없음.




2) 문제 : 첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다. 각 테스트케이스마다 A+B를 한 줄에 하나씩 순서대로 출력한다.

어제 풀었던 문제인데

  • 조건 넣어서 정답 만들어보기 시도
  • a 형태 어제 시도하던 부분에서 결과 다르게 나오는 이유 생각
    를 고민하며 다시 시도해봄.

다른 풀이
1.

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

let a = "";
let T = parseInt(input[0]);


    for(let i = 1; i<=T ; i++) {
        let A = parseInt(input[i].split(' ')[0]);
        let B = parseInt(input[i].split(' ')[1]);
        
        a += A+B + `\n`;
    }

     console.log(a); 

A,B선언 부분에서 parseInt를 사용
a+= A+B 부분을
a+= `${A+B}` 해도 가능

어제는 a += `${A+B} + \n`; 로 했어서 오답. \n은 따로 감싸주어야 함.


  • 어제 고민했던 조건을 어떻게 넣을까하는 부분은 for문 밖에서 console.log를 감싸며 if문을 쓰면 A,B가 for문 안에서 선언된 변수들이라 바깥에서 사용하게 되면 런타임오류(referenceerror)가 뜸.
    그렇다고 for문을 감싸면서는 아직 A,B가 선언되기 전이기에 a를 감싸면서 사용하면 정상적으로 진행됨.
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split('\n');

let a = "";
let T = parseInt(input[0]);

 
    for(let i = 1; i<=T ; i++) {
        let A = parseInt(input[i].split(' ')[0]);
        let B = parseInt(input[i].split(' ')[1]);
        if ( 1<= A,B <= 1000 && T <= 1000000) {
        a += A+B + `\n`;
    }}
 

     console.log(a); 

하루 돌아보며

또 기본적인 문법구조에서 오류를 범했었음.
예전보단 틀린 부분을 찾는 속도가 조금 빨라지거나 당장 고칠순 없어도 어느부분이 틀린지는 짐작할 수 있는 빈도가 늘어가고 있음.

공부 출처

BaekJoon


위의 내용은 공부중 본인이 이해한 내용으로 몇몇 틀린 내용이 있을 수 있습니다.
회독 혹은 공부간 틀린 내용 발견시 수정하겠습니다

좋은 웹페이지 즐겨찾기