백준 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;
}
}
Author And Source
이 문제에 관하여(백준 while문 node.js), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@bellecode20/백준-while문-node.js저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)