Skip to content
On this page

정렬 알고리즘 문제

수정하기
문서 생성 2021-05-05 16:55:41 최근 수정 2021-05-06 14:48:34

문제 1

  • 선택정렬 오름차순

풀이 1

function solution(arr) {
for(let i=0; i < arr.length-1; i++) {
let min_idx = i;
for(let j=i+1; j < arr.length; j++) {
if(arr[j] < arr[min_idx]) {
min_idx = j;
}
}
[arr[i], arr[min_idx]] = [arr[min_idx], arr[i]]
}
return arr;
}
let arr = [13, 5, 11, 7, 23, 15];
console.log(solution(arr));

문제 2

  • 버블정렬 오름차순

풀이 2

function solution(arr) {
let answer = arr;
for(let i=0; i < arr.length-1; i++) {
for(let j=0; j < arr.length-1-i; j++) {
if(arr[j] > arr[j+1]) {
[arr[j], arr[j+1]] = [arr[j+1], arr[j]];
}
}
}
return answer;
}
let arr = [13, 5, 11, 7, 23, 15];
console.log(solution(arr));

문제 3

  • 버블정렬 응용, 음수는 앞에 양수는 뒤로 양수와 음수끼리의 순서는 바뀌지 않도록

풀이 3

function solution(arr) {
let answer = arr;
for(let i=0; i<arr.length-1; i++) {
for(j=0; j<arr.length-1-i; j++) {
if(arr[j] > 0 && arr[j+1] < 0) {
[arr[j], arr[j+1]] = [arr[j+1], arr[j]];
}
}
}
return answer;
}
let arr = [1, 2, 3, -3, -2, 5, 6, -6];
console.log(solution(arr));

문제 4

  • 캐시 삽입정렬 LRU

풀이 4

function solution(cacheSize, task) {
let answer = Array.from({length: cacheSize}, () => 0);
task.forEach(x => {
let pos = answer.indexOf(x);
if(pos === -1) {
for(let i=cacheSize-1; i>=1; i--) {
answer[i] = answer[i-1];
}
} else {
for(let i=pos; i>=1; i--) {
answer[i] = answer[i-1];
}
}
answer[0] = x;
});
return answer;
}
let task = [1, 2, 3, 2, 6, 2, 3, 5, 7]
console.log(solution(5, task));
  • 메소드 사용하기
function solution(cacheSize, task) {
let answer = Array.from({length: cacheSize}, () => 0);
task.forEach(x => {
let pos = answer.indexOf(x);
if(pos === -1) {
answer.unshift(x);
if(answer.length > cacheSize) answer.pop();
} else {
answer.splice(pos, 1);
answer.unshift(x);
}
})
return answer;
}
let task = [1, 2, 3, 2, 6, 2, 3, 5, 7]
console.log(solution(5, task));

문제 5

  • 뒤바뀐 두 부분 찾기

풀이 5

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

문제 6

  • 좌표 정렬하기

풀이 6

function solution(arr) {
let answer = arr.slice();
answer.sort((a, b) => {
if(a[0] === b[0]) return a[1] - b[1];
else return a[0]-b[0];
})
return answer;
}
let arr=[[2, 7], [1, 3], [1, 2], [2, 5], [3, 6]];
console.log(solution(arr));

문제 7

  • 2차원 배열, 회의 시간 정하는 문제

풀이 7

function solution(arr) {
let answer = 0;
arr.sort((a, b) => {
if(a[1] === b[1]) return a[0] - b[0];
else return a[1] - b[1];
})
let et = 0;
for(x of arr) {
if(x[0] >= et) {
answer++;
et = x[1];
}
}
return answer;
}
let arr = [[1,4],[2,3],[3,5],[4,6],[5,7]];
console.log(solution(arr));