티스토리 뷰

알고리즘/코딩테스트 공부

1-8 일곱 난쟁이

YG - 96년생 , 강아지 있음, 개발자 희망 2021. 11. 24. 04:00

문제

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며,
아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

 

풀이

function solution(arr) {
  let answer;
  let sum = arr.reduce((a, b) => {
    return a + b;
  }, 0);
  endOfCircuit: 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[i]);
        //console.log(arr[j]);

        arr.splice(j, 1);
        arr.splice(i, 1);
        // arr.splice(j - 1, 1);  1. j먼저 splice하고 i를 하면 순서에 상관이 없다. 2 . i먼저 없애더라도 j-1 로 없애주면 된다.
        break endOfCircuit; // (sum - (arr[i] + arr[j]) === 100) 조건을 2번 만족시키면 계속 splice 하여 정답이 아니게 되므로 첫번째로 조건을 만족시킨다면 for문을 멈춰준다.
      }
    }
  }
  answer = arr.join(" ");
  return answer;
}

let arr = [20, 7, 23, 19, 10, 15, 28, 8, 13];
console.log(solution(arr));

reduce로 배열의 원소를 모두 합친 값을 구한뒤 이중 for문으로 두개의 원소를 모두 조합해보아서 sum - 두 원소를 했을 때 100을 만족시키는 조합이 있다면 두 값의 인덱스를 구해 splice 해준다. 또한 break로 for문을 멈추어 준다.

 

이로 인해 알게된 점 

 

splice의 2가지 방법과 break 를 할 때 for문에 이름을 붙일 수 있는지 알게 되었습니다.

'알고리즘 > 코딩테스트 공부' 카테고리의 다른 글

1-10 문자 찾기  (0) 2021.11.24
1-9 A를 #으로  (0) 2021.11.24
1-7 10부제  (0) 2021.11.24
1-6 홀수  (0) 2021.11.23
1-5 최솟값 구하기  (0) 2021.11.23
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함