알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

 

단어 공부


Think🤔

 

가장 많이 사용된 단어 출력 대문자로
Mississipi -> i가 4번 , s가 4번이므로 "?" 출력 
zZa -> Z 출력
baaa -> A 출력

HashMap으로 저장 후 가장 큰 value값 출력


Solution✍

 

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = "";
        str = br.readLine().toUpperCase();
		
		HashMap<Character, Integer> hs = new HashMap<>();
		
		// hs에 HashMap으로 key , value 값 넣어주기
		for(char c : str.toCharArray()){
			hs.put(c, hs.getOrDefault(c,0) + 1);
		}
		
		char ans = '?'; // 정답 기본값 '?"
		int max = 0;
		
		for(Map.Entry<Character, Integer> entry : hs.entrySet()){ 
			char c = entry.getKey();
			int eVal = entry.getValue();
			
			if(eVal > max){ 
				max = eVal; 
				ans = c;
			}else if(eVal == max){
				ans = '?';
			}
		}
		
		System.out.print(ans);
    }
}

 


Review🤩

 

1. Map.Entry 사용법에 대해서 검색해봤음. entry하면 hs 키 - 값 밸류를 뽑아서 반복문 돌릴 수 있음.
2. char c : str 돌릴려고 했는데 toCharArray() 
 -> str로 안되는 이유 : String 클래스가 'Iterable' 인터페이스를 구현하지 않아서 그럼
3. for문에서 break 추가 엔트리 2개 이상일 경우 그 다음부터 검증 안해도 되므로 break;해주는게 효과적
4. 맨 처음 readLine 받을 때 UpperCase 하는 것이 더 바람직
5. values()로 반복문 돌려서 max 먼저 알아 냈는데 그것보다 , max 값이 두개이면 '?'을 나오게하고, 그 외에 제일 큰 값이면 해당 c를 출력하게 바꿔줌.


 

+ Recent posts