티스토리 뷰
반응형
문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
예제
예제 입력 1 | 예제 출력1 |
10 5 2 3 1 4 2 3 5 1 7 |
1 1 2 2 3 3 4 5 5 7 |
풀이
이 문제를 총 3가지 방식으로 풀어보았다.
- 크기가 n인 배열에 모든 숫자를 차례대로 넣은 후 정렬하여 출력
- Map을 사용하여 입력으로 들어오는 숫자들과 그 개수만 저장한 후 정렬하여 출력
- 크기가 10001인 배열에 각 숫자마다 개수를 저장한 후 차례대로 출력
그 중 실행 시간이 가장 짧은 세 번째 방식에 대해 설명해보겠다.
- 1부터 10000까지의 숫자가 등장할 수 있기 때문에 크기가 10001인 배열을 선언한다.
- 입력으로 들어오는 숫자의 값을 index로 하는 배열의 값을 하나씩 증가시킨다.
- 배열의 index 1부터 10000까지 확인하며 해당 숫자가 등장한 개수만큼 출력한다.
마지막 출력 부분을 처음에는 StringBuilder를 사용하여 append하는 방식으로 풀었는데 메모리 초과가 발생해서 BufferedWriter를 사용하여 write하는 방식으로 풀어야 했다.
전체 소스코드는 다음과 같다.
import java.io.BufferedReader
import java.io.InputStreamReader
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val bw = System.out.bufferedWriter()
val n = br.readLine().toInt()
// 배열 초기화
val list = IntArray(10001)
// 나타난 숫자 표시
for (i in 0 until n) {
list[br.readLine().toInt()]++
}
for (i in 1..10000) {
bw.write("$i\n".repeat(list[i]))
}
bw.flush()
bw.close()
br.close()
}
반응형
'Develop > Algorithm' 카테고리의 다른 글
[프로그래머스/Kotlin] 이분탐색 - 입국심사 (0) | 2021.08.04 |
---|---|
[백준/Kotlin] 10773번: 제로 (0) | 2021.08.03 |
[백준/Kotlin] 1018번: 체스판 다시 칠하기 (0) | 2021.07.05 |
[백준/Kotlin] 2751번: 수 정렬하기 2 (0) | 2021.07.04 |
[백준/Kotlin] 1550번: 16진수 (0) | 2021.06.30 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 변수
- programmers
- hilt
- Naver AI Burning Day
- Android
- androidx.core
- 라이브 데이터
- architectural pattern
- Kotlin
- gradle
- 뷰모델
- BAEKJOON ONLINE JUDGE
- 알고리즘
- 우선순위큐
- viewmodel
- 프로그래머스
- Algorithm
- 후기
- 아키텍처 패턴
- MutableLiveData
- 안드로이드
- 힙
- livedata
- 자바
- SCPC2021
- heap
- error
- 백준
- 코틀린
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함