1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Paizaで「N を 0 にできるか?」という謎のミッションに挑戦!ルールは簡単なのに、条件が4パターンもあって書くのが面倒…。最近学んだ論理式( || )を使って少し簡単にしてみた!


■ 問題概要

整数 N, A, B が入力される。

  • 「N に A を足す or 引く」
  • 「N に B を足す or 引く」
    この2ステップを1回ずつ使って、N を 0 にできるか判定せよ!

入力例:
-10 8 2

出力例:

YES

考え方(設計図)

操作は「+A or −A」と「+B or −B」の2通りずつ。
つまり組み合わせは全部で 4パターン:

N + A + B
N + A – B
N – A + B
N – A – B

この中に「0」になるものがあれば YES、なければ NO





✅コード例:条件分岐

const rl = require('readline').createInterface({input:process.stdin});


rl.once('line',(input) => {
    const [N,A,B] = input.split(' ').map(Number)

    if (N + A + B === 0){
        console.log('YES');
    }
    
    else if (N + A - B === 0){
        console.log('YES');
    }
    
    else if (N - A + B === 0){
        console.log('YES');
    }
    
    else if (N - A - B === 0){
        console.log('YES');
    }
    
    else{
        console.log('NO');
    }
    
    rl.close();
});  

👆これも悪くないけど、最近勉強した || を使って少し短くできそう!



✅コード例:||でスマートに!

if (
    N + A + B === 0 ||
    N + A - B === 0 ||
    N - A + B === 0 ||
    N - A - B === 0
) {
    console.log("YES");
} else {
    console.log("NO");
}
  • || を使うことで「どれかひとつでも true ならOK!」という自然な書き方に!



気づきメモ ✍️

  • || は「または」を意味する論理演算子。複数条件を1つのif文にまとめられる。
  • 分かりやすく簡潔に書くと、ケアレスミス防止につながる!

まとめ

条件分岐にも、いろいろな工夫や書き方がある!




僕の失敗談(´;ω;`)と解決法🐈






💡おまけ:コード例

✅ 配列+ループで簡潔に

const ops = [+A, -A], bOps = [+B, -B];

for (let a of ops) {
    for (let b of bOps) {
        if (N + a + b === 0) ok = true;
    }
}

    Aに対して+Aと-ABに対して+Bと-Bをそれぞれループさせて試す

    N + a + b === 0でチェック
  • パターンの増加にも柔軟に対応可能。



✅ 関数化

function canMakeZero(N, A, B) {
    const candidates = [
        N + A + B,
        N + A - B,
        N - A + B,
        N - A - B
    ];
    return candidates.includes(0);
}


const rl = require('readline').createInterface({ input: process.stdin });
rl.once('line', (line) => 
    const [N, A, B] = line.split(' ').map(Number);
    
    
    console.log(canMakeZero(N, A, B) ? "YES" : "NO");


    rl.close();
});
  • ロジックを関数にまとめてメイン処理をスッキリ。
  • .includes(0)0 が作れるかを判定。



✅三項演算子で1行にまとめる

const r = [n+a+b, n+a-b, n-a+b, n-a-b].includes(0) ? 'YES' : 'NO';
console.log(r);
  • 一行にまとめて短く表現。



✅Setで0が存在するかチェック

    const results = new Set([
        N + A + B,
        N + A - B,
        N - A + B,
        N - A - B
    ]);

    console.log(results.has(0) ? "YES" : "NO");
  • set.has(0)0 が存在するか簡単に判定。
  • .Set() を使ってユニークな操作結果を格納。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?