이 문제는 단계적으로 해결하는 방법으로 정리해보려고 한다.
존재하지 않은 것을 가져오려고 할 때 발생하는데 아래 코드의 경우
Scanner kb = new Scanner(System.in);
ArrayList<String> list = new ArrayList<>();
while(true){
String x = kb.nextLine();
x=x.replace(" ", "");
if(x==null || x.isEmpty() ) break;
list.add(x);
}
위에서 발생한다.
문제가 EOF가 선언되기 전까지는 계속 입력을 받는 조건인데
나는 공백이거나 null인 경우에 while문을 벗어나도록 설정해놓았다.
문제의 조건과 다르다.
import java.util.*;
class Main{
public static String solution(ArrayList<String> list ){
HashMap<Character, Integer> map = new HashMap<>();
int max = Integer.MIN_VALUE;
String answer="";
for(int i=0;i<list.size(); i++){
for(int j=0;j<list.get(i).length();j++){
map.put(list.get(i).charAt(j),map.getOrDefault(list.get(i).charAt(j),0)+1);
}
}
Collection<Integer> values = map.values();
Iterator<Integer> it= values.iterator();
while(it.hasNext()){
Integer value = it.next();
if(max<value) max = value;
}
Iterator<Character> iit =map.keySet().iterator();
while(iit.hasNext()){
Character key = iit.next();
Integer value = map.get(key);
if(value==max) answer+=String.valueOf(key);
}
return answer;
}
public static void main(String[] args){
Scanner kb = new Scanner(System.in);
ArrayList<String> list = new ArrayList<>();
while(true){
String x = kb.nextLine();
x=x.replace(" ", "");
if(x==null || x.isEmpty() ) break;
list.add(x);
}
System.out.println(solution(list));
}
}
💡 따라서 Scanner의 hasNext()메소드를 이용하기로 한다.
hasNext()는 while문 body에 입력값이 있으면 true 없으면 false를 반환한다.
window의 경우 Ctrl+Z를 콘솔창에 입력하면 EOF로 간주하기 때문에
Ctrl+Z로 EOF를 간접적으로 선언한다.
import java.util.*;
class Main{
public static String solution(ArrayList<String> list ){
HashMap<Character, Integer> map = new HashMap<>();
int max = Integer.MIN_VALUE;
String answer="";
//2. list의 인덱스 별 값을 읽고
for(int i=0;i<list.size(); i++){
//그 값인 String을 문자로 접근해서 HashMap에 넣기
for(int j=0;j<list.get(i).length();j++){
map.put(list.get(i).charAt(j),map.getOrDefault(list.get(i).charAt(j),0)+1);
}
}
// 3. HashMap에 저장된 문자별 누적값 중 가장 큰 값을 구하기
Collection<Integer> values = map.values();
Iterator<Integer> it= values.iterator();
while(it.hasNext()){
Integer value = it.next();
if(max<value) max = value;
}
// 4. 앞서 구한 가장 큰 누적값을 가지고 있는 key값을 answer에 추가하기
Iterator<Character> iit =map.keySet().iterator();
while(iit.hasNext()){
Character key = iit.next();
Integer value = map.get(key);
if(value==max) answer+=String.valueOf(key);
}
return answer;
}
public static void main(String[] args){
Scanner kb = new Scanner(System.in);
ArrayList<String> list = new ArrayList<>();
//1. EOF가 될 때까지 값 입력받기
while(kb.hasNextLine()){
String x = kb.nextLine();
list.add(x.replace(" ","")); //HashMap에서 " "도 글자로 새기 때문에 제거하여 list에 담기
}
System.out.println(solution(list));
kb.close();
}
}
💡 따라서 TreeMap으로 문제를 푸니 정답이 나왔다.
import java.util.*;
class Main{
public static String solution(ArrayList<String> list ){
int[] arr = new int[26];
String answer="";
for(int i=0;i<list.size();i++){
for(int j=0;j<list.get(i).length();j++){
arr[list.get(i).charAt(j)-97]+=1;
}
}
int max = Arrays.stream(arr).max().getAsInt();
for(int i=0;i<arr.length;i++){
if(arr[i]==max){
answer+=Character.toString((char)(i+97));
}
}
return answer;
}
public static void main(String[] args){
Scanner kb = new Scanner(System.in);
ArrayList<String> list = new ArrayList<>();
//1. EOF가 될 때까지 값 입력받기
while(kb.hasNextLine()){
String x = kb.nextLine();
list.add(x.replace(" ","")); //HashMap에서 " "도 글자로 새기 때문에 제거하여 list에 담기
}
System.out.println(solution(list));
kb.close();
}
}