본문 바로가기

알고리즘/백준

[백준] 1181 - 단어 정렬 (JAVA/ 자바)

반응형

1181번 문제(1)
1181번 문제(2)

 

처음에 푼 방식이 맞았다고 뜨긴 했는데 다시 넣어보니 시간초과 이슈가 발생했다. 그래서 BufferedReader를 사용하여 

최대한 시간을 줄여보았다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

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());
    List<String> list = new ArrayList<>();

    for(int i=0; i<N; i++){
        list.add(br.readLine());
    }
    //1.단어 중복 제거
    list = list.stream().distinct().collect(Collectors.toList());
    String[] arr = list.toArray(new String[list.size()]);  
    //2.사전순으로 정렬
    Arrays.sort(arr);   
    //3.길이 비교
    for(int i=0; i<arr.length; i++){
        Arrays.sort(arr, (String s1, String s2) -> s1.length() - s2.length());      
    }
    for(int i=0; i<arr.length; i++){
        System.out.println(arr[i]);
    }
br.close();
}
}

 

Comparator 익명 클래스를 사용한 방법

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

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());
    List<String> list = new ArrayList<>();

    for(int i=0; i<N; i++){
        list.add(br.readLine());
    }
    //1.단어 중복 제거
    list = list.stream().distinct().collect(Collectors.toList());
    String[] arr = list.toArray(new String[list.size()]);
    
    //2. 정렬하기
    Arrays.sort(arr, new Comparator<String>() {
        @Override
        public int compare(String s1, String s2){
            if(s1.length() == s2.length()) {
                return s1.compareTo(s2);
            }else{
                return s1.length() - s2.length();
            }
        }    
    });
    for(int i=0; i<arr.length; i++){
        System.out.println(arr[i]);
    }
br.close();
}
}

 

[참고한 블로그]

중복 제거

https://seungwontech.tistory.com/23

 

[Java] distinct()

먼저 distinct()를 설명하기 전에 저는 중복된 값이 포함될 수 있는 List에 중복이 있는지 확인하고 있으면 중복된 값을 반환해줘야 하는 코드를 작성해야 했었습니다. 그래서 어떤 식으로 코드를

seungwontech.tistory.com

ArrayList를 배열로 변환

https://mommoo.tistory.com/32

 

JAVA - ArrayList에서 배열로, 배열에서 ArrayList로

프로그래밍을 하다보면 데이터 자료구조를 변환해야 할 때가 있다. 오늘 포스팅은 ArrayList or List 배열(Array)로 변환하는걸 다루어본다. 중요한건 자료구조를 바꾸는 것이지 자료형은 일치해야 한

mommoo.tistory.com

문자열 길이 기준 정렬 방법

https://sdardew-valley.tistory.com/59

 

[Java] 문자열 배열을 길이를 기준으로 정렬하기

Java에서 문자열 배열을 정렬하면 기본적으로는 사전 순대로 정렬을 해준다. ex) (b, abc, ca) -> (abc, b, ca) 이렇게 말고 위의 예시의 배열을 아래돠 같이 길이 순대로 정렬을 해보고자 한다. ex) (b, ca, a

sdardew-valley.tistory.com

 

이렇게 보니까 문제 해결 우선순위만 내가 결정하고 코드 짜기는 한 게 없는 거 같다...

반응형