본문 바로가기

백준/JavaScript

[JS] 백준 반복문 - 마지막 이야기

728x90

 

오늘은 반복문 마지막 이야기다.

 

 

 

그럼 바로 가자~

 

문제 2439번

https://www.acmicpc.net/problem/2439

 

2439번: 별 찍기 - 2

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

www.acmicpc.net

 

'음.. 어제 풀었던 별 찍기 문제를 반대로 하면 되지 않을까?' 하고 코드를 작성하는데, 오늘은 머리가 좀 돌아가지 않는 것 같다. 그래서 다른 분의 풀이를 봤는데 그 분은 별 담는 변수와 공백 담는 변수를 따로 만들어서 그것을 한줄씩 출력해주었다. 오호... 이렇게도 할 수 있구나. 그 코드를 열심히 공부한 후 내가 안 보고 작성해보았다.

 

const fs = require('fs');
//백준에 제출할 때 써야하는 코드
const readFileSyncAdress = '/dev/stdin';
//테스트
//const readFileSyncAdress = 'input.txt';

const input = fs.readFileSync(readFileSyncAdress).toString();
const N = Number(input);
let star = '';
let blank = '';

for(let i=0;i<N;i++){
    star += '*';
    for(let j=0;j<N-i-1;j++){
        blank += ' ';
    }
    console.log(blank+star);
    blank='';
}

 

 

 

 

그리고 repeat() 함수를 사용하기도 했길래 이것도 따로 작성해보았다.

const fs = require('fs');
//백준에 제출할 때 써야하는 코드
const readFileSyncAdress = '/dev/stdin';
//테스트
//const readFileSyncAdress = 'input.txt';

const input = fs.readFileSync(readFileSyncAdress).toString();
const N = Number(input);

for(let i=0;i<N;i++){
    console.log(' '.repeat(N-i-1)+'*'.repeat(i+1));
}

 

 

 

[참고] https://velog.io/@ho2yahh/%EB%B0%B1%EC%A4%80-2439.-%EB%B3%84-%EC%B0%8D%EA%B8%B0-2feat.-Javascript-node.js-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98

 

 

 

 

문제 10952번

https://www.acmicpc.net/problem/10952

 

10952번: A+B - 5

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

이 문제는 for문의 조건 부분에 A와 B가 0이 아닐 때까지 반복하라는 조건을 넣어야될 것 같다.

const fs = require('fs');
//백준에 제출할 때 써야하는 코드
const readFileSyncAdress = '/dev/stdin';
//테스트
//const readFileSyncAdress = 'input.txt';

const input = fs.readFileSync(readFileSyncAdress).toString().split('\n');
let A = Number(input[0].split(' ')[0]);
let B = Number(input[0].split(' ')[1]);

for(let i = 1;A!=0&&B!=0;i++){
    console.log(A+B);
    A = Number(input[i].split(' ')[0]);
    B = Number(input[i].split(' ')[1]);
}

 

 

 

다른 풀이도 찾아보니까 for문을 input.length(입력받은 값 길이)만큼 돌려 A+B를 해서 값이 0이 나오면 break; 하도록 만들어줬다. 어떤 분은 마지막 인덱스를 제외한 배열(input.length - 1)만큼 for문으로 돌려줬다.

 

 

문제 10951번

https://www.acmicpc.net/problem/10951

 

10951번: A+B - 4

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

이 문제는 이전 문제와 다르게 마지막에 0 0이 오지 않는다. 그러니 입력받은 값의 길이만큼 반복해주면 될 것 같다.

const fs = require('fs');
//백준에 제출할 때 써야하는 코드
const readFileSyncAdress = '/dev/stdin';
//테스트
//const readFileSyncAdress = 'input.txt';

const input = fs.readFileSync(readFileSyncAdress).toString().trim().split('\n');
let A,B;

for(let i = 0;i<input.length;i++){
    A = Number(input[i].split(' ')[0]);
    B = Number(input[i].split(' ')[1]);
    console.log(A+B);
}

 

 

처음에는 trim()을 안 작성해줘서 틀렸다. 일부 입력값의 마지막에 개행문자가 포함된 경우가 종종 있다고 한다. 이런 경우 split('\n')을 할 경우 공백문자 하나를 더 갖는 배열을 반환한다. 이를 방지하기 위해 trim()을 사용해야 한다. 

 

 

 

 

오늘은 드디어 반복문이 끝났다~~~(와)

내일 다음 단계로 넘어간다 ㅎㅎ.

 

좋았어~~ 파이팅하자!

 

728x90