Algorithm/Baekjoon(Node.js)

[JavaSrcipt] Baekjoon - 2750 : 수 정렬하기

비망노트 2021. 10. 18. 23:00

문제

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개의 숫자가 모두 정렬된다.

 

 

 

사실 이마저도 가물가물해서 몇번이나 고쳐보면서 수행한것이다.

정렬알고리즘들을 정리해야겠다.

 

-출처

https://www.acmicpc.net/problem/2750