🗃️javascript/코테 프레임 문제
1-8 일곱난쟁이(틀림)(24년 업데이트: 맞춤)
하얀성
2023. 9. 18. 14:42
<제출답안>
여러 함수 사용 및 재귀함수 사용.
입력순서대로 출력해야 되는데 그러지 못함.
function sum(arr){
let sum = 0;
for(let i=0; i<arr.length-2; i++){
sum += arr[i]
}
return sum;
}
function change(arr){
let tmp = arr[0];
arr.shift();
arr.push(tmp);
return arr
}
function solution(arr){
if(sum(arr) === 100){
arr.pop();
arr.pop();
return arr;
}else{
let changedArr = change(arr)
return solution(changedArr);
}
}
arr=[20, 7, 23, 19, 10 ,15, 25 ,8, 13];
console.log(solution(arr));
<답안>
sum은 늘 100인 점을 이용해서 순서대로 이중 for문을 돌면서 sum - 두 수의 합 === 100을 만족하도록 함.
두 수 중에서 j를 먼저 뽑아내야 한다. j가 뒤에 있는 수이기 때문에.
그리고 flag 를 통해서 이중 for문을 탈출한다.(break 두번씀)
function solution(arr){
let answer=arr;
let sum=answer.reduce((a, b)=>a+b, 0);
let flag = 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);
flag = 1;
break;
}
}
if(flag == 1) break;
}
return answer;
}
let arr=[20, 7, 23, 19, 10 ,15, 25 ,8, 13];
console.log(solution(arr));
24.4.10 업데이트.
풀긴 풀었는데 j=i+1했다가 가독성이 나한테는 떨어져서 바꿨는데
i+1을 해야 같은 인덱스끼리의 반복을 막을 수 있음.
다행히 합에서 100을 뺀 값에서의 두 조합을 구한다는 생각을 해낸게 핵심인듯하다.
function solution(arr) {
let answer;
let sum = arr.reduce((a, c) => a + c);
for (let i = 0; i < arr.length; i++) {
for (let j = 1; j < arr.length; j++) {
if (arr[i] + arr[j] === sum - 100) {
answer = arr.filter((x) => x !== arr[i] && x !== arr[j]);
return answer;
}
}
}
}
let arr = [22, 7, 21, 19, 10, 15, 25, 8, 13];
console.log(solution(arr));