[アルゴリズム]JS-アレイ要素の最適値を求め、リストし、三角形を作成する


質問1:配列要素の最大値を求めます(デフォルトの最大値の問題はいくつかありますが、1つだけアップロードされます)
  • メソッド1):Math.min()は最高価格を求める方法で解き,高速文法を用いる!
  • メソッド2):arr.sort()昇順に配列内の要素をソートし、最小の最初の要素を出力します.
  •  function solution2(arr) {
            // 배열을 인자로 넘겨줘야하므로, ...arr 로 배열의 요소를 풀어서 담아준다.
    				return Math.min(...arr); 
          }
          console.log(solution2([5, 7, 1, 3, 2, 9, 11]); // 1
                      
    function solution2(arr) {
            // [1, 2, 3, 5, 7, 9, 11][0] === arr[0]  => 1
            return arr.sort((a,b) => a - b)[0];  
          }
          console.log(solution2([5, 7, 1, 3, 2, 9, 11])); //1
    質問2:長さの異なるA、B、Cの長さが3本あり、3本の棒は三角形にして「OK」を出力し、できなければ「NO」を出力します.

  • 方法:三辺(三辺)三角形にならない条件と三角形になれる条件を考える
    条件:3つのエッジの長さがある場合、最長エッジの長さは2つのエッジの長さの和より小さくなければなりません.
    三角形の成立条件
    プール)
  • すべてのエッジの長さを昇順に並べます.
  • に配列された小さな要素の最初の2つの要素の和が最後の要素より大きい場合?「OK」非「NO」の3つの演算子からなる

  • 準備コードはほとんど異なる方法で解読された.
    エッジ全体の長さ-最大エッジの長さの減算値を、エッジ全体の長さから2つのエッジの長さを減算した値と再比較します.
  •  // 내 코드
    function solution(a, b, c) {
      let arr = [a,b,c].sort((a,b) => a - b);
      return arr[2] < arr[0] + arr[1] ? "OK" : "NO"
    }
    console.log(solution(33, 30, 50)); // OK
    
    // if문으로 쓴다면? 이런 방식이다.
    function solution(a, b, c) {
      let arr = [a,b,c].sort((a,b) => a - b);
      if (arr[2] < arr[0] + arr[1]) {
      	return "OK" 
      } else {
      	return "NO"
    	}        
    }
      console.log(solution(33, 30, 50)); 
    
    質問3:n人の学生に鉛筆を1本ずつ配るのにどれだけ打つ必要があるか.(1ダース=12袋/学生数<=1000名)

  • 方法
  • (1打12把==学生12名時1打)!
    13なら.12(1ダース)+1ダース、1ダース少なくても2ダース必要です.
  • 풀이) 
    
    1. 12자루가 1다스니깐,  학생수 n / 12로 나눠서 다스의 개수를 구한다.
    
    2. 이때 소숫점( 자루 )가 나올경우를 생각하여 Math메소드를 사용하여 올림을 해준다.
    
       (소숫점있을 시 다스 +1 한개 늘어남)
    function solution(n) {
    	return Math.ceil(n / 12);
      //(n / 12) => 178/12 => 14.833333333333334  // 소수점이 나올경우 !
      // Math.ceil() => 15가 된다.
      }
    
     console.log(solution(178));
    質問4:1から自然数Nまでの和
    プール)
    宣言変数0個を
  • の追加値で割り当てます.
  • 反復文,初期値)はi=1を+1増加させ,nまでの数字を繰り返し増加させる.
  • function solution(n){
      let result=0;
      for(let i = 1; i <= n; i++){
     		// result = result + i;
        result += i;
      }
      	return result;
      }
    console.log(solution(5)) // 15
    質問5:9人が自分がジュニアだと言った.本物の7人の小人の身長の和は100だそうです.本物のジュニアを見つけて、7人のジュニアの身長をリストします**

  • 与えられた値:9人の矮人身長:[20,7,23,19,10,15,25,8,13]

  • アプローチ方法)7人の矮人の身長は100なので、2人の矮人の身長を出すだけです.
  • プール)
  • のすべてのジュニアの身長を求めるために、reduceですべての配列要素の累積値を求めます.
  • 双砲口は2名の要素のジュニアのすべての情況の鍵を調べて、
  • の累積値のうち、この2人のジュニアの身長の減算値が100の場合、
  • この2つの要素=>arr.splice(i,1)、arr.splice(j-1,1)を
  • 配列から除去する.
  • は、2つの要素が欠けている配列を出力します.
  • パッチ(index,el):このメソッドは、作成時にindexの1番目の要素を削除します!->覚えておいて
  • function solution(arr){
      let sum = arr.reduce((acc,cur)=> acc + cur,0);;
      for (let i = 0; i < arr.length; i++) {
        for (let j = i + 1; j < arr.length; j++) {
         	if((sum - (arr[i] + arr[j])) === 100) {
          console.log(arr); //[20, 7, 23, 19, 10, 15, 25, 8, 13] // 15, 25 가 제거되는 상황
            arr.splice(i, 1); //인덱스(i)번째 요소 1개 제거
            console.log(arr); // [20, 7, 23, 19, 10, 25, 8, 13]
            arr.splice(j-1, 1);  // 15가 제거되어 15의 인덱스가 6 -> 5로 바뀜
    
    // 인덱스 i번째 요소가 제거되어서 전체적인 베열이 1 인덱스씩 당겨지므로 -1 을 해야 삭제되길 원하는 요소가 삭제된다.
    	    }
        } 
    
      }
    return arr; 
    }
    let arr=[20, 7, 23, 19, 10, 15, 25, 8, 13];
    console.log(solution(arr)); // [20, 7, 23, 19, 10, 8, 13]