문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
예제입력 | 예제출력 |
5 5 2 3 4 1 |
1 2 3 4 5 |
⭕ 풀이
const input=require('fs').readFileSync('/dev/stdin').toString().trim();
let arr=input.split('\n').map(x=>Number(x));
let t=arr.shift();
arr.sort(function(a,b){
return a-b;
})
console.log(arr.join('\n'));
사실 sort 메소드를 전에 써본적이있다면 쉽게 풀 수 있는 문제이지만
해당단계는 정렬 단계이므로 정렬알고리즘을 사용해 풀어봐야 의미가 있다고생각했다.
정렬알고리즘에는 버블정렬, 삽입정렬, 선택정렬 등의 기본정렬알고리즘부터
병합정렬,힙정렬 등의 알고리즘이 있다.
정보처리기사 준비할때의 기억을 살려 그나마 제일 간단한방법으로 정렬해보았다.
⭕ 풀이
const input=require('fs').readFileSync('/dev/stdin').toString().trim();
let arr=input.split('\n').map(x=>Number(x));
let t=arr.shift();
//5
//5 2 3 4 1
for(let i=0;i<t;i++){
for(let j=0;j<t;j++){
if(arr[j]>arr[j+1]){
let temp=arr[j];
arr[j]=arr[j+1]
arr[j+1]=temp;
}
}
}
console.log(arr.join('\n'))
이전단계였던 브루트포스와 비슷하게
다 훑어야하므로 이중반복문을 사용해준다.
arr[j]와 그다음인덱스인 arr[+1]을 비교하고
앞의 인덱스가 더 크다면 temp라는 그릇변수를 사용해
arr[j]값을 담아둔다음
arr[j]에는 arr[j+1]을 넣고
담아뒀던 temp 즉 arr[j]에 있던 값을 arr[j+1]자리에 넣는것이다.
j가 0일때 첫바퀴
5>2 true
temp=5이며 5자리에 2가들어가고 2자리에 5가들어간다
//2 5 3 4 1
j가 1일때 두바퀴
arr[1]즉 5>3 true
위과정 반복으로
//2 3 5 4 1
이렇게 돌리면 j 반복문이 끝나면 2 3 4 1 5 가 되어있다.
이는 큰 한바퀴만 돌렸다고보면되므로
전체를 정렬해주기 위해 i를 사용한 아우터루프문이 있는것이다.
i<t 즉 0 1 2 3 4 다섯 큰바퀴를 돌리므로 5개의 숫자가 모두 정렬된다.
사실 이마저도 가물가물해서 몇번이나 고쳐보면서 수행한것이다.
정렬알고리즘들을 정리해야겠다.
-출처
'Algorithm > Baekjoon(Node.js)' 카테고리의 다른 글
[JavaSrcipt] Baekjoon - 2751 : 수 정렬하기 2 (0) | 2021.10.20 |
---|---|
[JavaSrcipt] 정렬알고리즘 (거품,선택,삽입) (0) | 2021.10.19 |
[JavaSrcipt] Baekjoon - 1436 : 영화감독 숌 (0) | 2021.10.17 |
[JavaSrcipt] Baekjoon - 1018 : 체스판 다시 칠하기 (0) | 2021.10.16 |
[JavaSrcipt] Baekjoon - 7568 : 덩치 (0) | 2021.10.15 |