김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.
첫째 줄에 듣도
못한 사람의 수 N
, 보도
못한 사람의 수 M
이 주어진다. 이어서 둘째 줄부터 N
개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2
째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 알파벳 소문자로만 이루어지며, 그 길이는 20 이하이다. N
, M
은 500,000 이하의 자연수이다.
듣도 못한 사람의 명단에는 중복되는 이름이 없으며, 보도 못한 사람의 명단도 마찬가지이다.
듣보잡의 수와 그 명단을 사전순으로 출력한다.
3 4
ohhenrie
charlie
baesangwook
obama
baesangwook
ohhenrie
clinton
2
baesangwook
ohhenrie
-문제를 만든 사람: author5
import java.io.*;
import java.util.*;
public class Code1764 {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String[]number=br.readLine().split(" ");
int N=Integer.valueOf(number[0]); //듣도 못함
int M=Integer.valueOf(number[1]); //보도 못함
HashMap<String,Integer> nolisten=new HashMap<>();
for(int i=0;i<N;i++){
nolisten.put(br.readLine(),i);
}
HashMap<Integer,String> noListenSee=new HashMap<>();
Integer count=0;
for(int j=0;j<M;j++){
String temp=br.readLine();
if(nolisten.get(temp)!=null){//듣보잡
noListenSee.put(count,temp);
count++;
}
}
br.close();
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(count+"\n");
List<String> noList=new ArrayList<>(noListenSee.values());
noList.sort(String::compareTo);
for(String value:noList){
bw.write(value+"\n");
}
bw.flush();
bw.close();
}
}
사전 순으로 정렬이 제대로 안됐었다.
List<String> noList=new ArrayList<>(noListenSee.values());
noList.sort(String::compareTo);
for(String value:noList){
bw.write(value+"\n");
}
이렇게 하면 값을 기준으로 오름차순 정렬(사전순)이 된다!
값들을 List
에 저장한 다음, 값들을 noList.sort(String::compareTo)
로 정렬을 한다.
아니면 Collections.sort(noList);
로 하던지..