0
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?

今回の問題で、条件分岐メニューの問題は最後!


問題概要

A から B までの整数から 2 つ選んで掛け算し、その最小値を出す。

※同じ値を使ってもよい。

入力例:

3 5

出力例:

9




❌NG例:1

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


rl.once('line', (input) => {

  const [A, B] = input.split(' ').map(Number);
  const result = A ** 2; // これだとAが負のとき大間違い!
  console.log(result);

  rl.close();
});

どちらも正の数の場合は、最小である A と A をかければいいけど…。



❌NG例:2

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

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


  if (A >= 0) {
    console.log(A ** 2);
  } 

  else {
    // ここもBが負かどうか考えないとアウト!
    console.log(A * B); 
  }


  rl.close();
});




✅OK例

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


rl.once('line', (input) => {
    const [A, B] = input.split(' ').map(Number);
    
    
    // AとBどちらも正の数の場合
    if(A >= 0 && B >= 0){
        const result = A ** 2;
        console.log(result);
    }
    
    // AとBどちらも負の数の場合
    else if(A <= 0 && B <= 0){
        const result = B ** 2;
        console.log(result)
    }
    
    
    // Aは負の数、Bは正の数の場合
    else if (A <= 0 && B >= 0){
        const result = A * B;
        console.log(result);
    }

    rl.close();
});



📝気づきメモ

  • 負×負=正:プラスになっちゃうので要注意!
  • 積の最小値は範囲の端だけ確認すればOK。中間は無視で大丈夫。


まとめ

今回のPaiza問題、端っこだけ確認するだけでスッキリ解決できるって気づけるかとすべての場合を考えるのが大事!




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




💡おまけ

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

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

    // 考えられる最小積候補
    const candidates = [
      A * A,
      A * B,
      B * A, // 実際には不要
      B * B
    ];

    const minValue = Math.min(...candidates);
    console.log(minValue !== 0 ? minValue : 0);

    rl.close();
});

✅ 同じ値の組み合わせも OK
✅ 範囲の端だけ見れば良い
✅ 4つの候補から最小値を探すだけ!


📌 minValue !== 0 ? minValue : 0 をする理由

JavaScript では、負の数(例えば -1)に 0 を掛けると、-0 になる。

0 と -0 は同じ0だけど、厳密には違う値として扱われ、間違いとして減点されてしまった。

📌でも、=== で比較するときは:

0 === -0 // true
0
0
2

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
0
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?