2022/03/16) 6. 장난꾸러기 현수 [정렬과 그리디, 결정알고리즘]

굥굥이·2022년 3월 16일
0

1. 문제

<장난꾸러기 현수>
: 선생님은 반 학생들에게 반 번호를 정해 주기 위해 반 학생들을 키가 가장 작은 학생부터 일렬로 키순으로 세웠다. 제일 앞에 가장 작은 학생부터 반 번호를 1번부터 N번까지 부여한다. 현수는 짝꿍보다 키가 크다. 그런데 현수가 짝꿍과 자리를 바꿨다.
현수와 짝꿍이 자리를 바꾼 반 학생들의 일렬로 서있는 키 정보가 주어질 때 현수가 받은 번호와 현수 짝꿍이 받은 번호를 차례로 출력하는 프로그램을 작성한다.

2. 해결 방법

  1. 깊은 복사(slice:기존의 배열을 건들이지 않음)를 해서 기존의 배열과 비교하면 된다.
  2. 인덱스번호는 0으로 시작하고 키 순은 1부터 시작하는 거 조심!

! 얕은 복사와 깊은 복사

  • 얉은 복사 : 값이 들어있는 메모리 주소값을 복사 (메모리의 주소를 복사!)
    - 해당되는 자료형 : 참조타입(Array, Object)
  • 깊은 복사 : 값 자체를 복사 (메모리의 을 복사!)
    - 해당되는 자료형 : 원시타입(Number, String, Boolean, Null, undefined)

3. 정답

        <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>

4. 소감

완전 쉬운 문제군 현수와 현수짝꿍의 번호를 차례로 출력하라고 했는데 어차피 키가 큰 현수가 앞에 가있으니 걍 push해주면 되군.

profile
아자아자 파이띵굥!

0개의 댓글