초보 개발자의 일기

일곱 난쟁이 본문

코딩테스트/JS 알고리즘 문제(JS)

일곱 난쟁이

판다꼬마 2022. 8. 5. 15:19
728x90

문제

 

입력

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

 

출력

  • 입력된 순서대로 일곱 난쟁이의 키를 출력한다.

 

입력 예시

20 7 23 19 10 15 25 8 13

출력 예시

20 7 23 19 10 8 13

풀이 방법

처음에 for문을 두 번 중첩해서 돌리다가 splice를 사용했는데 j가 자꾸 이상한 게 없어져서

솔루션을 보고 이해했다.

arr.splice(i,1);

arr.splice(j,1);을 하면

i가 없어지면 그 뒤에 있는 원소들이 당겨져서 삭제해야 할 j의 원소의 위치가 달라져서 다른 게 없어진 것이었다.

그래서 j부터 없애고 i을 삭제시키면 문제가 해결되었다.

내 코드

Solution

<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(arr){
                let answer=arr;
                let sum=answer.reduce((a, b)=>a+b, 0);
                for(let i=0; i<8; i++){
                    for(let j=i+1; j<9; 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>
    </body>
</html>

느낀 점

splice(a, b)는 a위치에 있는 원소를 b만큼 삭제시킨다는 의미이다. 

728x90

'코딩테스트 > JS 알고리즘 문제(JS)' 카테고리의 다른 글

대소문자 변환  (0) 2022.08.11
A를 #으로  (0) 2022.08.05
10부제  (2) 2022.08.04
홀수  (0) 2022.08.03
최솟값 구하기  (0) 2022.08.03