<제출답안>
여러 함수 사용 및 재귀함수 사용.
입력순서대로 출력해야 되는데 그러지 못함.
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));
'🗃️javascript > 코테 프레임 문제' 카테고리의 다른 글
1-10 문자 찾기(24년)[수정된 기존 배열 리턴: map, 기존 배열x : forEach] (0) | 2023.09.19 |
---|---|
1-9 A를 # 으로(24년)[배열은 참조타입, 문자열은 원시타입] (0) | 2023.09.19 |
1-7 10부제(24년 업데이트) (0) | 2023.09.18 |
1-6 홀수(24년 업데이트)[reduce 에서 객체 안 값 사용시, 초기값 사용필수] (0) | 2023.09.17 |
4-1 자리수의 합[브루트포스] ,reduce 0 : 타입 초기화 (0) | 2023.09.16 |