<장난꾸러기 현수>
: 선생님은 반 학생들에게 반 번호를 정해 주기 위해 반 학생들을 키가 가장 작은 학생부터 일렬로 키순으로 세웠다. 제일 앞에 가장 작은 학생부터 반 번호를 1번부터 N번까지 부여한다. 현수는 짝꿍보다 키가 크다. 그런데 현수가 짝꿍과 자리를 바꿨다.
현수와 짝꿍이 자리를 바꾼 반 학생들의 일렬로 서있는 키 정보가 주어질 때 현수가 받은 번호와 현수 짝꿍이 받은 번호를 차례로 출력하는 프로그램을 작성한다.
- 깊은 복사(slice:기존의 배열을 건들이지 않음)를 해서 기존의 배열과 비교하면 된다.
- 인덱스번호는 0으로 시작하고 키 순은 1부터 시작하는 거 조심!
! 얕은 복사와 깊은 복사
- 얉은 복사 : 값이 들어있는 메모리 주소값을 복사 (메모리의 주소를 복사!)
- 해당되는 자료형 : 참조타입(Array, Object)- 깊은 복사 : 값 자체를 복사 (메모리의 값을 복사!)
- 해당되는 자료형 : 원시타입(Number, String, Boolean, Null, undefined)
<script> function solution(arr){ let answer = []; let sortArr = arr.slice(); sortArr.sort((a,b) => a-b); console.log(sortArr); for(let i = 0; i < arr.length; i ++){ if(arr[i] != sortArr[i]) answer.push(i+1); } return answer; } let arr=[120, 130, 150, 150, 130, 150]; console.log(solution(arr)); </script>
완전 쉬운 문제군 현수와 현수짝꿍의 번호를 차례로 출력하라고 했는데 어차피 키가 큰 현수가 앞에 가있으니 걍 push해주면 되군.