자바스크립트 코딩테스트 '장난꾸러기 현수'

오름차순 정렬되어있는 배열에서 임의로 바꾼 2개의 배열 인덱스값을 찾는 문제.

  1. 내 풀이 :
    버블정렬을 응용하여 뒤에서부터 배열탐색.
    (입력예제 (2)때문에 (같은 값 존재) 뒤에서부터 탐색했다.)
    if값에 해당하는 인덱스값을 변수 idx에 저장해놓고, swap값을 증가시킴.
    idx값과 idx-swap값을 answer에 push한다.
function solution(arr){
	let answer=[];
	let swap=idx=0;

	for (let i=arr.length-1; i>=0; i--) {
    	if (arr[i-1] > arr[i]) {
      		idx=i;
      		[arr[i-1], arr[i]] = [arr[i], arr[i-1]];
      		swap++;
	    }
 	 }
	answer.push(idx);
  	answer.push(idx+swap);
  	return answer;
}

let arr=[120, 125, 152, 130, 135, 135, 143, 127, 160];
console.log(solution(arr));
  1. 쌤 풀이 :
    arr를 sort로 정렬한 다음, for문을 돌려서 기존 arr와 비교하여 다른 값의 인덱스를 answer에 push한다.
function solution(arr){

	let answer=[];
	let sortArr=arr.slice();
	sortArr.sort((a, b)=>a-b);
	for (let i=0; i<arr.length; i++) {
		if (arr[i]!==sortArr[i]) answer.push(i+1);
	}

	return answer;
}

let arr=[120, 125, 152, 130, 135, 135, 143, 127, 160];
console.log(solution(arr));

좋은 웹페이지 즐겨찾기