백준 while문 node.js

10952번

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "예제.txt";
const input = fs.readFileSync(filePath).toString().split("\n");
let N = 0;
while (N < input.length - 1) {
  let A = Number(input[N].split(" ")[0]);
  let B = Number(input[N].split(" ")[1]);
  N += 1;
  console.log(A + B);
}

처음에 이렇게 작성했는데 틀렸다. 아마 마지막 줄엔 0 0이 오는 조건을 무시해서인듯 하다. 출력엔 0 0이 없길래, 일부러 마지막 줄 전까지만 출력했거든요..ㅋㅋㅋ


const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "예제.txt";
const input = fs.readFileSync(filePath).toString().split("\n");
let N = 0;

while (input[N].split(" ")[0] != 0 && input[N].split(" ")[1] != 0) {
  let A = Number(input[N].split(" ")[0]);
  let B = Number(input[N].split(" ")[1]);

  console.log(A + B);
  N += 1;
}

while 조건에 입력값이 0 0 이 아닌 경우로 설정한다.

10951번

  • 처음 작성한 코드이다. \r\n 으로 쓴건 왜 그랬냐면 vscode에서는 콘솔로그를 찍을 떄 \r까지 나와서 저렇게 작성했다. 그런데 \n으로만 해도 잘되니까 저렇게 할 필요 없다.
  • 그리고 문제는 분명히 내 vscode에서는 잘되는데.. 다 출력ㄱ이 잘 되는데 틀리다는 것이다. 진짜 돌아버리는 줄 알았다. 정답코드를 찾아서 내 vsc에 돌려보면 자꾸 마지막 것만 출력이 안되서 이상했는데 말이다......
//오답 코드
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "예제.txt";
const input = fs.readFileSync(filePath).toString();

const cal = () => {
  const line = input.split("\r\n");
  let counts = 0;
  while (counts < line.length) {
    console.log(
      Number(line[counts].toString().split(" ")[0]) +
        Number(line[counts].toString().split(" ")[1])
    );
    counts++;
  }
};
cal();

정답 코드를 내 vsc에 쳤을 때

내 오답 코드를 내 vsc에 쳤을 때

이상한점 1 마지막 줄의 7까지 출력이 되는게 정상인데 정말 이상했다...
이상한점 2 정답코드의 while 조건이 이상했다.

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

var i = 0;
while(i < input.length - 1) {
    let a = Number(input[i].split(' ')[0])
    let b = Number(input[i].split(' ')[1])
    console.log(a + b)   
    i++
}

0으로 시작하면 while(i < input.length - 1)이 아니라 while(i < input.length)로 해야지 전체를 다 셀 수 있는데.. 왜 -1을 썼을까...싶었다.

그래서 이것저것 더 찾아보니 답을 찾았다ㅠㅠ
https://www.acmicpc.net/board/view/59328

아무래도 테스트 케이스 마지막부분에 \n 이 하나더 추가되어 있나보네요
이러한 문제는 b.trim().split('\n') 으로 해주시면 length-1 을 안해주셔도 됩니다.

아마 테스트케이스에 마지막이 \n이 추가되어있었나보다..ㅋ
그래서 나도 trim()붙여서 공백을 제거했더니 해결했다!!


정답.

const { counts, count } = require("console");
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "예제.txt";
const input = fs.readFileSync(filePath).toString().trim();

const cal = () => {
 const 줄마다 = input.split("\n");
 let counts = 0;
 while (counts < 줄마다.length) {
   console.log(
     Number(줄마다[counts].toString().split(" ")[0]) +
       Number(줄마다[counts].toString().split(" ")[1])
   );
   counts++;
 }
};
cal();

1110번

몰랐던 개념

=는 기본자료형에는 깊은 복사가 된다.

지금까지 =는 얕은 복사만 된다고 알고 있었는데.. 그게 아니었다. 기본자료형(숫자, 문자열, boolean)에는 깊은 복사가 되고, 객체(배열 포함)의 경우엔 얕은 복사가 되는 것이다.
https://wanna-b.tistory.com/18

그걸 몰라서 전역범위에 N을 정의하지 않았다.
let N = input;
이렇게 쓰면 둘이 값 공유가 된다고 생각해서 하지 않았던 것이다ㅠ_ㅠ
문제 없으니까 전역범위에 써주자.

+는 숫자로 바꿔주는 단항 연산자이다.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Expressions_and_Operators

정답 코드

자꾸 함수로 분리하려고 했는데 굳이 안그래도 문제 없을 것 같다.

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "예제.txt";
// const input = fs.readFileSync(filePath).toString().split("");
const input = fs.readFileSync(filePath).toString().trim();

let addN = 0;
let count = 0;
let N = +input;
let isNotSame = true;
while (isNotSame) {
  addN = Math.floor(N / 10) + (N % 10);
  N = (N % 10) * 10 + (addN % 10);
  count++;
  if (N == input) {
    console.log(count);
    isNotSame = false;
  }
}

출처: https://velog.io/@wandakim/boj-node.js-%EB%B0%B1%EC%A4%80-1110%EB%B2%88-%EB%8D%94%ED%95%98%EA%B8%B0-%EC%82%AC%EC%9D%B4%ED%81%B4

좋은 웹페이지 즐겨찾기