-
[백준/BOJ] 2751번 : 수 정렬하기 2 (JAVA / 자바)백준 2022. 2. 25. 18:44
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/2751
2751번: 수 정렬하기 2
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
www.acmicpc.net
- 문제 -
난이도 실버 5 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
(JAVA / 자바) Scanner 와 Bufferedreader
안녕하세요~ 코딩하는 코알못 코메인입니다. 이번엔 백준 문제 풀면서 계속 언급될 scanner와 bufferedreader에 대한 간단한 정리를 해볼거다. 자바에서 입력은 scanner와 bufferedreader가 있다. 우선 각자
comain.tistory.com
풀이 방법
처음엔 그냥 배열에 값을 저장하고, Arrays.sort로 정렬했다. 그리고 출력했다.
하지만 시간초과가 나오고, Arrays.sort보다 더 빠른 Collections.sort를 사용했다. (저장은 list)
시간 초과가 나왔다.
한참 고민을 하다가 정렬쪽에서 내가 멀 더 건드려야 할지를 모르니 출력을 봤다. 100만개나 되는 출력을 라인마다 하게 되면 당연 잡아먹는 메모리는 클 것이고, 시간도 많이 잡아먹을 것이다. 그렇기에 StringBuilder에 값을 저장하고, 한번에 출력했다. 통과했다.
구현자체는 어려울게 없기에, 사용한 함수와 코드를 보자.
사용한 함수 : list, Collections.sort, StringBuilder
배열과 Arrays.sort를 쓰지 않는 이유는 100만개의 값을 정렬해주려면 Arrays.sort로는 시간을 맞추기 어려울 것이라 봤기 때문이다.
코드로 보자.
-풀이-
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(br.readLine()); List<Integer>list = new ArrayList<Integer>(); StringBuilder sb = new StringBuilder(); for(int i = 0; i < T; i++) { list.add(Integer.parseInt(br.readLine())); } Collections.sort(list); for(int i = 0; i < T; i++) { sb.append(list.get(i)).append("\n"); } System.out.println(sb); } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.[백준/BOJ] 1008번 : A/B (JAVA / 자바)
'백준' 카테고리의 다른 글
[백준/BOJ] 11399번 : ATM (JAVA / 자바) (0) 2022.02.25 [백준/BOJ] 15903번 : 카드 합체 놀이 (JAVA / 자바) (0) 2022.02.25 [백준/BOJ] 15552번 : 빠른 A+B (JAVA / 자바) (0) 2022.02.25 [백준/BOJ] 2577번 : 숫자의 개수 (JAVA / 자바) (0) 2022.02.25 [백준/BOJ] 10953번 : A+B - 6 (JAVA / 자바) (0) 2022.02.25