알고리즘/코딩테스트 공부
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문에 이름을 붙일 수 있는지 알게 되었습니다.