새소식

알고리즘/문제

[BOJ/백준 - 10989] 수 정렬하기 3

  • -

문제 출처: https://www.acmicpc.net/problem/10989

 

10989번: 수 정렬하기 3

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.

www.acmicpc.net


 

일단 

수 정렬하기 1,

수 정렬하기 2는 풀었을 것이다

 

근데 해당 문제인 수 정렬하기 3은 문제 밑의 코멘트에

'수의 범위가 작다면 카운팅 정렬을 사용하여 더욱 빠르게 정렬할 수 있습니다.'

라고 적혀있고 작성 당시 기준 정답 비율이 22~23%이다

 

이걸 보면 따로 알고있는 방법이 없다면 카운팅 정렬을 써야할것을 알 수 있다

근데 카운팅 정렬을 아는가?

 

알면 좋은데 난 몰랐음

그래서 카운팅 정렬이 뭔지 찾아봄

 

어느 글을 읽었더니 '입력값이 정수가 보장되어 있다면 수를 비교하지 않고 하는 정렬' 이런식으로 적혀있었음

수를 비교하지 않음 + '카운팅' 정렬임 -> 아하

 

(입력값+1) 크기의 배열을 만든다음 

배열[입력값]++;

입력이 끝나면 배열을 차례대로 돌면서 카운팅된 만큼 인덱스값을 출력함

 

나는 모두 출력되도 배열의 끝까지 보내는게 싫어서 값을 하나씩 줄일때마다 N도 줄여서

N값이 0이되면 바로 출력하게 해놓았음

 

오늘도 하나 건져간다

 

 

'알고리즘 > 문제' 카테고리의 다른 글

[BOJ/백준 - 1463] 1로 만들기  (0) 2021.09.27
[BOJ/백준 - 18870] 좌표 압축  (0) 2021.09.08
[BOJ/백준 - 2580] 스도쿠  (0) 2021.09.05
[BOJ/백준 - 5430] AC  (0) 2021.08.29
[BOJ/백준 - 1316] 그룹 단어 체커  (0) 2021.08.14
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.