본문 바로가기
java

백준 1157 단어 공부 자바 java 해시맵 사용

by MiaCoder 2024. 1. 9.
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws Exception {
    	
    		Scanner sc = new Scanner(System.in);
    		// 문자열 입력받기 
    		String str = sc.next().toUpperCase(); 
    		//대소문자 비교를 위해 모두 대문자로 변경 
    		
    		Map<Character, Integer> charFrequencyMap = new HashMap<>();
    		// 문자열별로 사용한 개수를 세기 위해 키, 값 형태로 저장하는 HashMap를 사용, 선
    		
    		for(char c : str.toCharArray()) {// char c는 char타입의 배열이된 str을 순차적으로 반
    			if(Character.isLetter(c)) { // c가 문자라
    				charFrequencyMap.put(c, charFrequencyMap.getOrDefault(c, 0) + 1);
    				//charFrequencyMap에 c 값을 넣는다. 이 때 이미 있는 값이면 (c, c+1의 형태로
    				// 처음 넣는다면 (c, +1)의  값으로 넣는다. 
    				// 만약 A값이 이미 있다면 A에 A의 값에 1을 더하라는 의미, A가 기존에 없다면 키에 A를 추가하고 값으로 1을 넣으라는 의미
    			}
    		}
    		
    		char mostAlp = ' ';
    		// 가잠 많이 사용한 문자를 저 
    		int max = 0;
    		// 최댓 값을 저
    		for(Map.Entry<Character ,Integer> entry : charFrequencyMap.entrySet()) {
    			//해시맵을 반복하기 위해 임의의 해시맵을 설정하고 반복함 for-each문 참
    			if(entry.getValue() > max) { // 값이 최대인 것을 찾음 
    				max = entry.getValue();
    				mostAlp = entry.getKey();// 최댓값이 갱신되면 mostAlp에 저장 
    			}
    			else if(entry.getValue() == max){
    				mostAlp = '?';
    				// 최댓값이 중복될 경우 '?'출력 
    			}
    		}
    		
    		System.out.print(mostAlp); // 출력
    		
    		
    	}
    }