코딩응애의 개발블로그

[JS] 백준 단계별로 풀어보기 (while문), 10951 trim() 본문

알고리즘 문제

[JS] 백준 단계별로 풀어보기 (while문), 10951 trim()

이너멜 2022. 1. 25. 14:48

백준 10952번 문제 

백준 문제들을 풀 때 입력을 어떻게 코드를 짜야할지 아직도 익숙지 않고 어렵다 이 문제도 겨우 이해를 했는데 사실 계속 풀어보긴 해야 할 듯싶다. 일단 전체 코드부터 보자면

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(__dirname + '/input.txt').toString().split('\n');

const testcaseArray = [];
for (let i = 0; ; i++) {
    const tempValue = input[i].split(' ').map(value => +value);
    testcaseArray.push({A : tempValue[0], B : tempValue[1]});
    if (tempValue[0] === 0 && tempValue[1] === 0) {
        break;
    }
}

solution(testcaseArray);

function solution(testcaseArray) {
    let A = testcaseArray[0].A;
    let B = testcaseArray[0].B;
    let idx = 1;
    while(A !== 0 || B !== 0) {
        console.log(A+B);
        A = testcaseArray[idx].A;
        B = testcaseArray[idx].B;
        idx++;
    }
}

여기서 가장 이해가 안됬던 부분이 뭐냐면 

A = testcaseArray[idx].A;

코드 안에 이 부분이었는데 이게 객체를 가져오는 과정이랜다. 코드를 자세히 살펴보니 이 부분이 객체였던 것이다.

testcaseArray.push({A : tempValue[0], B : tempValue[1]});

 

중괄호를 못 보고선 계속 그냥 배열에 추가하는 거구나라고 생각해서 구글에 검색해도 해결책이 안 나왔던 것이다.

이 문제를 풀면서 새롭게 알게 된 점은 배열에 push()를 이용해서 객체를 추가할 수 있다는 점과

객체에 key값은 문자열 또는 기호여야 하고 value값은 모든 유형이 될 수 있다는 점

마지막으로 내가 가장 궁금했던 거 A = testcaseArray[idx].A; 이건 그냥 value값 가져오는 과정이었다. (배열이름.key

 

백준 문제 10951번 

위에 문제와 거의 비슷한 문제 단지 백준에서 입력 값에 끝에 줄 바꿈 공백이 있어서 틀렸다고 나올 수 있는데

 문제를 해결하기 위해서는 새로운 조건문을 하나 추가해줘야 한다.

 

일부 입력값의 마지막에 개행문자가 포함된 경우가 종종 있다.

이런 경우 split("\n")할 경우 공백문자 하나를 더 갖는 배열을 반환한다.이를 방지하기 위해서 trim()을 사용한다.

출처 : https://tesseractjh.tistory.com/39    

 

백준 문제 1110번

우선 코드를 보자면 

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(__dirname + '/input.txt').toString().split('\n');


solution(+input[0]);

function solution(N) {
    let makeNum = N;
    let sum;
    let count = 0;
    while(makeNum !== N || count === 0) {
        count++;
        sum = Math.floor(makeNum/10) + (makeNum % 10);
        makeNum = (makeNum % 10) * 10 + (sum % 10);

        if (makeNum === N) {
            break;
        }
    }
    console.log(count);
}

 각 자릿수를 구하는 방법을 알면 쉽지만 그 방법까지 생각해 내는 게 어려운 문제 그리고 while문에 조건 또한 생각해야 하고 makeNum이라는 변수 선언도 따로 생각해야 하는 문제 let makeNum = N; 이 한 줄 코드 때문에 더 오래 걸렸다 

저거를 선언해줘야 코드가 실행이 된다 그리고 각 자릿수 구하는 법들은 코드를 보면 이해가 될 것이다 저걸 생각을 해내냐가 문제인 거지..

 

※ 백준 문제를 풀면서 정리를 하고 있지만 내가 나중에 봤을 때 이해가 돼야 되는데 그전 포스트를 보면 코드를 보면서 정리한 거를 봐야 이해가 되는 수준으로 정리를 해놔서 차라리 그냥 정리할 때 코드를 붙여 넣고 그 코드에서 몰랐던 점이나 새로 알게 된 점을 정리하는 식으로 하는 게 훨씬 나을 것 같아서 앞으로 그렇게 할 거임 

Comments