Node.jsでバックグラウンドで質問に答えるときに入力を処理する
11316 ワード
質問する
Javascript学習アルゴリズムを使うのは初めてなので、始める前にI/O方法を学び始めました.以前に他の言語で解いた問題は,学習の過程で1259問の解答を開始した(ファリンドロンすう).
私は今回JavaScriptでアルゴリズムを解き始め、Githubに記録を残すためにvscodeで問題を解きます.私が最初に書いたコードは次のとおりです.
// 1259.txt
121
1231
12421
0
const input = require('fs')
.readFileSync('baekjoon/1000~/1259.txt') // 1259.txt는 백준의 입력 예시가 똑같이 저장된 파일입니다.
.toString()
.split('\n');
const arr = input.filter((e) => e !== '0');
arr.forEach((e) => {
let reverse = e.split('').reverse().join('');
console.log(reverse.trim() === e.trim() ? 'yes' : 'no');
})
最後のconsole.log()
でreverse
とarr.[i]
に対してtrim()
が行われたのは、すべての結果がnoとして出力されるため、これらの結果が追加されてプリアンブルが削除されるからである.vscodeでの実行結果は
yes\n no\n yes
で正しく、このコードをコミットしました.結果は
틀렸습니다
でした.私のアルゴリズムは間違っていると思います.修正後何度も提出しましたが、
틀렸습니다
しか確認できませんでした.最後に、最後の提出も間違っていることを確認し、googlingで正解者のコードをコピーし、私のコードと比較して勉強し、コードをコピーすることにしました.解決する
let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n"); // (1)
input.pop();
// (2)
for (let i = 0; i < input.length; i++) {
let reverseStr = input[i].split("").reverse().join("");
console.log(input[i] === reverseStr ? "yes" : "no"); // (3)
}
ソース 私のコードと次のコードの比較の違いは、
(1)inputで
trim()
を行う(2)
for
とforEach()
を用いて巡回配列(3)最後の3つの演算子は
trim()
を使用しません.私がコードを修正するポイントは(1)、(3)で、次のアルゴリズムの違いではありません.
const input = require('fs')
.readFileSync('baekjoon/1000~/1259.txt')
.toString()
.trim() // 새로 추가된 부분
.split('\n');
...
arr.forEach((e) => {
let reverse = e.split('').reverse().join('');
console.log(reverse === e ? 'yes' : 'no'); // trim() 제거
})
vscodeの出力結果はno\n no\n no
で間違いかと思いましたが、百駿に提出すれば정답입니다
だと思います.ここで私は2つの疑問を生んだ.
틀렸습니다
にはどんな違いがありますか?console.log()
の3つの演算子では、開行文字の存在はあまり影響しませんか?1つ目の理由はgooglingで分かったことですが、白駿入力の最後にアルファベットを1文字追加することが多いので、
trim()
を使うのが望ましいです.この問題は、問題の入力例がそうではないかもしれませんが、コミット時に入力される可能性があることを示しています.(入力例を無条件に信じない)
2日ならなぜかわかる方メッセージをお願いします
参考になる文章
Node.jsでBaek Jun(BOJ)問題を解く際の注意点
Reference
この問題について(Node.jsでバックグラウンドで質問に答えるときに入力を処理する), 我々は、より多くの情報をここで見つけました https://velog.io/@circlewee/Node.js로-백준-문제-풀이시-팁テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol