코드노트

자바스크립트 배열 문제 풀이 - 배열의 정해진 합을 만족하는 요소 본문

Code note/자바스크립트 알고리즘 문제풀이

자바스크립트 배열 문제 풀이 - 배열의 정해진 합을 만족하는 요소

코드노트 2022. 8. 23. 15:31

Q. 배열이 9개가 있다.

배열에서 7개를 더하면 100이 된다.

9개의 배열중에서 2개를 빼고 7개로 합이 100이 되는 배열을 출력해야 한다.

 

처음 생각 했을 때는 경우의수를 통해서 9개의 배열중에 7개의 를 경우의수로 뽑아 전체 합이 100이 되는 수를 계산해볼까? 라는 생각을 했다.

그렇게 하기에는 너무 많은 경우의 수가 있기 때문에

9개를 모두 더한 후 100을 뺀 값에 만족하는 두 수를 찾으려고 했다.

 

1. 배열의 값을 모두 더한다.

2. 더한 값에 100을 뺀다.

3. 뺀 값에 만족하는 2개의 수를 찾아낸다.

4. 기존 배열과 비교하여 2개를 빼고 출력한다.

 


 

1. 배열의 값을 모두 더한다.

2. 더한 값에 100을 뺀다.

  let sum = 0;
  for (let i = 0; i < dwarf.length; i++) {
    sum += dwarf[i];
  }
  
  sum -= 100;

- 더해진 값을 저장할 변수를 만든다.

- for문을 통해서 모두 더하고 변수값에서 바로 100을 빼서 저장한다.

 

 

3. 뺀 값에 만족하는 2개의 수를 찾아낸다.

  let res = [];
  for (let i = 0; i < dwarf.length; i++) {
    for (let j = i + 1; j < dwarf.length; j++) {
      if (sum == dwarf[i] + dwarf[j]) {
        res.push(dwarf[i], dwarf[j]);
      }
    }
  }

- 빈 배열 변수를 만든다.

- j를 돌리는 for 문은 시작할 지점을 i + 1 로 잡아준다. 같은 수를 비교할필요 없기 때문!

- for문을 2개를 돌리면서 i + j = sum 이 성립하는 수를 빈 배열변수에 넣어준다.

 

 

4. 기존 배열과 비교하여 2개를 빼고 출력한다.

  for (let i = 0; i < dwarf.length; i++) {
    if (dwarf[i] != res[0] && dwarf[i] != res[1]) {
      result.push(dwarf[i]);
    }
  }

기존배열과 함께 뺼 배열과 같은 배열들을 조건으로 나머지를 출력한다.


 

★다른방법

* 굳이 배열값을 받지 않고 인덱스 값을 받아서 사용해도 되었다.

  for (let i = 0; i < dwarf.length; i++) {
    if (dwarf[i] != res[0] && dwarf[i] != res[1]) {
      result.push(dwarf[i]);
		res[0] = i;
  		res[1] = j;
  		break;
    }
   	if(res.length != 0) break; // 모두 찾으면 정지
  }

res 값에 인덱스로 저장!하여 인덱스로 비교하여 출력.