코딩테스트 by JS
JavaScript <일곱난쟁이>
mickey7
2023. 3. 12. 11:58
풀이 성공!
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(arr){
let sum = 0; //초기값 안주면 NaN에러 발생.
for(let x of arr){
sum += x;
}
if(sum != 100){
let want = sum - 100;
//console.log(want);
for(let i=0; i<arr.length; i++){
let first;
let second;
first = arr[i];
for(let j = i+1; j<arr.length; j++){
second = arr[j];
if(arr[i]+arr[j] == want){
//console.log(want)
//console.log(arr[i])
//console.log(arr[j])
//console.log(arr)
//console.log(i,j);
arr.splice(i,1); //arr.splice 메소드 활용
//console.log(arr);
arr.splice(j-1,1); //arr.splice(i,0);을 먼저하면 원래 j가 삭제하려했던 것을 삭제 못해서..
//console.log(arr);
//console.log(sum);
}
}
}
}
let answer = ""
for(let y of arr){
console.log(y)
answer += y + " "
}
//출력값이 똑같긴 한데 배열을 일렬로 출력하는 다른 방법이 있는지 찾아보자.
return answer;
}
//1차 풀이 실패 --> 해결 방법이 딱히 떠오르지 않는다.
//2차 풀이 --> 약간의 힌트를 얻어서 풀었는데 차례차례 비교하면서 해야된다는 것에서 반복문 안에 반복문을 만들어서 풀자는 생각에 풀어봄.
let arr=[20, 7, 23, 19, 10, 15, 25, 8, 13];
console.log(solution(arr));
</script>
</body>
</html>
- console.log로 일일이 확인하면서 풀 수 있는게 JS의 장점인 것 같다. 출력값이 중간에 어떻게 나오는지 확인했더니 풀이 가능!
- 1차 풀이 실패 후 2차 풀이 힌트는 결국 배열 안에 있는 요소를 서로 확인하면서 풀어야 한다는 데에서 얻었다.(for문 안에 for문)
- 합계 구할 때 초기값 안주면 NaN 발생.
- arr.slice()메소드를 직접 활용해봤다. 첨가, 삭제 모두 가능한 메소드
- --> 그런데 두 개의 값을 뺄 때는 첫번째 값이 먼저 삭제되면 두 번째 값은 그만큼 보정을 해서 빼야하기 때문에 i가 j보다 무조건 작을 수밖에 없는 수라서 j-1을 활용해서 보정해봤는데 다른 방법이 없는지 확인해볼 예정.
- --> 찾아본 결과 ! 생각을 간단하게 해보면 j>i이기때문에 arr.slice(j,1)을 먼저 한 후에 arr.slice(i,1)을 하는 방법이...!
- --> 그런데 두 개의 값을 뺄 때는 첫번째 값이 먼저 삭제되면 두 번째 값은 그만큼 보정을 해서 빼야하기 때문에 i가 j보다 무조건 작을 수밖에 없는 수라서 j-1을 활용해서 보정해봤는데 다른 방법이 없는지 확인해볼 예정.
- 마지막 출력값에서 배열 요소를 일렬로 쫙 펼치고 싶은데 생각이 나지 않아서..
- 얕은복사 활용하는 방법도 있는데.. 얕은복사 , 깊은 복사 개념은 처음 들어봤는데 참조 방식의 차이인가? 찾아볼 예정!