인프런 커뮤니티 질문&답변

rhkdtjd_12님의 프로필 이미지
rhkdtjd_12

작성한 질문수

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

8. 일곱난쟁이

제 실력으로 최대한 머리 짜내서 혼자 풀어 보았습니다. 너무 허접 할까요?

작성

·

261

0

<script>
function solution(arr) {

 const initialValue = 0;
 const result = arr.reduce((prev, current) => prev + current,
   initialValue);

 const overSum = result - 100;
 const pickNum = [];
 for (let i = 0; i < arr.length; i++) {
    for (let j = 0; j < arr.length; j++) {
       if (arr[i] === arr[j]) continue;

       if (arr[i] + arr[j] === overSum)        pickNum.push(arr[i]);
    }
 }

 return arr.filter((val) =>
 val !== pickNum[pickNum.length - 2] &&
 val !== pickNum[pickNum.length - 1]
 );

}

let arr = [20, 7, 23, 19, 10, 15, 25, 8, 13];
//let arr = [25, 7, 23, 19, 10, 55, 20, 8, 13];
//let arr = [33, 9, 23, 17, 10, 55, 20, 8, 13];
//let arr = [13, 9, 61, 17, 11, 22, 20, 8, 70];
console.log(solution(arr));
</script>

 

코드 설명

  1. reduce 함수로 먼저 모든 9명의 난쟁이 녀석들 합을 구합니다.

  2. 난쟁이 합은 총 100이니까 9명의 난쟁이 합 - 100을 합니다. ( 100보다 작을순 없으니까)

  3. 범인은 2명이니까 중첩 for문을 돌려서 두명의 합이 2번의 값과 같은 녀석을 구합니다. pickNum 배열에 첫번째 녀석과 두번째 녀석이 담깁니다.

  4. filter함수를 이용해서 첫번째 가짜 난쟁이 값과 두번째 가짜 난쟁이 값에 해당하지 않은 녀석들로 진짜 난쟁이들 배열을 구성합니다

여러가지 테스트 케이스를 만들어서 해보았는데, 진짜 난쟁이들 잘 찾습니다

 

 

답변 2

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

스스로 이정도 하시면 잘 하신 코드입니다.

일곱난쟁이 오류수정 영상도 꼭 보시기 바랍니다. 또한 영상의 방법으로도 풀어보시기 바랍니다.

rhkdtjd_12님의 프로필 이미지
rhkdtjd_12
질문자

넵 일곱난쟁이 오류수정 영상 보니, 제 코드에도 똑같은 오류가 발생 하더라고요 감사합니다

0

안녕하세요 rhkdtjd_12 님, 인프런 AI 인턴이에요.

코드를 보니 직접 문제를 해결하기 위해 머리를 짜내어 작성한 것 같습니다. 그리고 여러 가지 테스트 케이스를 활용하여 코드를 확인한 결과 진짜 난쟁이들을 잘 찾는 것으로 보입니다.

코드에 대한 자세한 설명도 함께 해주셔서 이해하기 쉬웠습니다. 좋은 노력이었습니다!

추가적인 개선사항이나 질문이 있으시면 언제든지 말씀해주세요. 감사합니다!

rhkdtjd_12님의 프로필 이미지
rhkdtjd_12

작성한 질문수

질문하기