-
[백준/BOJ] 1181번 : 단어 정렬 (JAVA / 자바)백준 2022. 2. 20. 21:11
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/1181
- 문제 -
난이도 실버 5 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
입력값을 길이가 짧은 순서대로 출력하고, 여러개일경우 사전순으로 출력한다. 같은 이름은 하나만 출력한다.
우선 입력값을 sort함수로 정렬을 해준다. 정렬을하면 사전순으로 정렬이 된다.
그렇다면 이젠 길이가 1인 값부터 차례대로 출력하면서, 값이 같은 값들은 제외하고 출력하면 조건을 만족하는 출력이 된다.
필자는 이 방법으로 풀었고, 출력시간이 상당히 오래 걸렸다. 하지만 다른 사람들 풀이를 보니, 정렬을 하면서 길이와 사전순으로 정렬을 한번에 하고, 중복되지 않는 값만 출력했다.
당연히 후자방법이 더욱 빠르다. 하지만 나같은 초짜는 쉽게 접근할 수 없는 방법으로 푸는 방식이라 좀 더 코딩 실력을 키우면 해보겠다.
코드를 보자.
-풀이-
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; 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 N = Integer.parseInt(br.readLine()); StringBuilder sb = new StringBuilder(); List<String> list = new ArrayList<String>(); //입력값을 list에 저장 for(int i = 0; i < N; i++) { list.add(br.readLine()); } //정렬 Collections.sort(list); //입력 값의 길이 제한이 50이기 때문에 1~50까지 확인 for(int i = 1; i <= 50; i++) { for(int j = 0; j < list.size();) { //해당 인덱스의 값의 길이가 i와 같다면 sb에 저장하고 list에서 해당하는 모든 값을 제거 if(list.get(j).length() == i) { sb.append(list.get(j)).append("\n"); list.removeAll(Arrays.asList(list.get(j))); //제거하면 당연 현재 인덱스에 있는 값도 사라지는데 다음 인덱스로 넘어가면 //당연하게도 현재 인덱스에 옮겨진 값도 넘어가버리기때문에 지워지지 않았을때마 다음 인덱스로 넘어간다. }else { j++; } } //list가 비어버리면 반복문을 종료한다, if(list.isEmpty()) break; } System.out.println(sb); } }
-결과-
위에껀 내가 푼 풀이
아래꺼는 풀이에 적은 후자 방법
월등한 성능을 보여줌
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 1021번 : 회전하는 큐 (JAVA / 자바) (0) 2022.02.21 [백준/BOJ] 1002번 : 터렛 (JAVA / 자바) (0) 2022.02.21 [백준/BOJ] 1158번 : 요세푸스 문제 (JAVA / 자바) (0) 2022.02.20 [백준/BOJ] 1094번 : 막대기 (JAVA / 자바) (0) 2022.02.20 [백준/BOJ] 1524번 : 세준세비 (JAVA / 자바) (0) 2022.02.20