반응형
문제
아홉 난쟁이 모두가 자기가 일곱 난쟁이라고 주장한다. 일곱 난쟁이의 키의 합이 100이고 아홉 난쟁이의 키가 주어졌을 때, 그 중 일곱 난쟁이를 찾는 프로그램을 작성하시오.
(아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우 아무거나 출력)
입력 예제
20 7 23 19 10 15 25 8 13
출력 예제
20 7 23 19 10 8 13
정답
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];
먼저 reduce를 이용해서 배열 전체의 합을 구해준다.
그리고 배열의 요소 2개의 합을 구해서 전체 합에서 그 합을 뺀 값이 100이 되는 경우를 찾는다.
찾았다면 splice를 이용해서 배열에서 제거해준다. 이 때, i를 먼저 제거하면 j의 인덱스가 줄어들기 때문에 j-1로 splice를 하거나, j를 먼저 제거하도록 한다. (이때 j=i+1이기 때문에 j<i일 경우는 고려하지 않아도 된다.)
(filter를 이용해서도 한번 풀어보았다.)
function solution(arr) {
let answer;
let sum = arr.reduce((a, b) => a + b, 0);
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (sum - (arr[i] + arr[j]) === 100) {
answer = arr.filter((x) => x !== arr[i] && x != arr[j]);
}
}
}
return answer;
}
let arr = [20, 7, 23, 19, 10, 15, 25, 8, 13];
본 문제는 아래의 인프런 자바스크립트 알고리즘 문제풀이 강의의 내용입니다. 자바스크립트로 코딩테스트를 준비중이시라면 꼭 들어보시는 것을 추천드려요!
반응형
'Algorithm > Problem Solving' 카테고리의 다른 글
[Python] 백준/BOJ - 5885번: 거스름돈 (0) | 2021.10.15 |
---|---|
[Python] 백준/BOJ - 11399번: ATM (0) | 2021.10.09 |
[JS] LeetCode - 2. Add Two Numbers (0) | 2021.10.01 |
[JS] 봉우리 (0) | 2021.09.09 |
[JS] LeetCode - 53. Maximum Subarray / 카데인 알고리즘(Kadane's Algorithm) (0) | 2021.09.08 |