알고리즘 스터디 12주차 정렬_02

정재혁·2022년 4월 3일
0

백준1764번 문제

문제 : 듣보잡



문제 설명 :

듣도 못한 사람의 배열과 보도못한 사람의 명단이 주어질 때 공통되는 사람을 정렬을 통해 출력하는 문제.


코드 :

package Baekjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main_1764 {
    public static void main(String[] argv) throws IOException{
        BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
		String Nli[] = new String[N];
        String Nse[] =new String[M];
		for(int i=0;i<N;i++){
        	Nli[i] = br.readline;
		}
        for(int i=0;i<M;i++){
        	Nse[i] = br.readline;
		}
        ArrayList<String> NAll =new ArrayList<>();


        for(int i=0;i<N;i++){
            for(int j=0;j<M;j++){
                if(Nli[i].equals(Nse[j])) NAll.add(Nli[i]);
            }
        }

        Collections.sort(NAll);
        System.out.println(NAll.size());
        for(int i=0;i<NAll.size();i++){
            System.out.println(NAll.get(i));
        }

    }
}

처음 이런식으로 접근해 같으면 ArrayList에 넣고 그걸 정렬하는 형태로 했으나 시간초과,, 그러고 찾아본 방법이 set,, 근데 이것도 시간초과 그 결과 StringBuilder를 사용해야한다는 것을 알고 다시 접근.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main_1764 {
    public static void main(String[] argv) throws IOException{
        BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        Set<String> set = new HashSet<>();  //set.contain()을 쓰기 위함.
        ArrayList<String> NAll =new ArrayList<>(); //그리고 여기다 추가.

        for(int i=0;i<N;i++){
            set.add(br.readLine()); 
        }
        for(int i=0;i<M;i++){
            String str = br.readLine();
            if(set.contains(str)) NAll.add(str);
        }
        Collections.sort(NAll);
        sb.append(NAll.size()).append("\n");
        for(int i=0;i<NAll.size();i++){
            sb.append(NAll.get(i)).append("\n");
        }
        System.out.println(sb);

    }
}


문제 풀이:

배열을 따로 안만들고 Set으로 처음 듣도못한 놈들을 입력받고, 그 후 보도 못한 놈들을 한명씩 입력받아 Set.contain()을 통해 바로 바로 포함하는 지 확인한다. 만약 있다면 ArrayList로 추가해서 저장 -> 저장한 값들을 Collections.sort로 정렬해 StringBuilder로 출력한다.


참조:
https://zzang9ha.tistory.com/146,
http://daplus.net/java-stringbuilder%EC%97%90-%EA%B0%9C%ED%96%89%EC%9D%84-%EC%B6%94%EA%B0%80%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95/

profile
저는 정재혁임니다^___^

0개의 댓글