2021/12/14) 8. 일곱난쟁이

굥굥이·2021년 12월 14일
0
post-thumbnail

1. 문제

<일곱난쟁이>
: 난쟁이는 일곱 명이여야 한다. 그런데 아홉 명이 난쟁이라고 우긴다.
하지만 다행히도 백설공주가, 일곱 난쟁이의 키의 합이 100임을 알고 있었다.
아홉 난쟁이의 키가 주어졌을 때, 백설공주를 도와 일곱 난쟁이를 찾는 프로그램을 작성한다.

2. 해결 방법

  1. 얕은 배열 복사를 한 후, reduce로 아홉 난쟁이들 키 합을 구하고,
    중첩 for문으로, 비교를 한다.
    i는 0부터 length- 1까지. j는 i+1부터 length까지!
    그리고 splice를 이용해, 거짓말하는 난쟁이를 없애버린다.
  2. 유의할 점 :
    얕은 복사는 기존 배열과 똑같은 메모리?라고 생각하면 된다. 그리하여 answer에 변동이 발생하면, arr에도 변동이 발생한다.
    splice로 인덱스3에 있던 값을 짜르면, 인덱스4에 있던 값이 인덱스3으로 넘어온다. 그래서 뒤에 있는 것 먼저 짤라준다.

3. 정답

        <script>
            function solution(arr){
                let answer=arr;
                let sum=answer.reduce((a, b)=>a+b, 0);
                for(let i=0; i<answer.length-1; i++){
                    for(let j=i+1; j<answer.length; j++){
                        if((sum-(answer[i]+answer[j]))===100){
                            answer.splice(j, 1);
                            answer.splice(i, 1);
                        }
                    }
                }
                return answer;
            }
            let arr=[20, 7, 23, 19, 10, 15, 25, 8, 13];
            console.log(solution(arr));
        </script>

4. 내 코드와 비교 그리고 반성

나는 정말 돌머리같은 게 구현을 못한다. 합이 100이여야 하니, 다 더한 값에 100을 뺀 나머지 값이 거짓말쟁이난쟁이1 + 거짓말쟁이난쟁이2를 합한 값이라는 거 까진 생각했지만, 그 다음을 못했다.

profile
아자아자 파이띵굥!

0개의 댓글