글 작성자: 취업중인 피터팬
728x90

https://www.acmicpc.net/problem/1157

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

아스키 코드를 사용하지 않고 제 나름대로 만들어서 결과를 출력하는것까지는 성공했는데 백준에서는 시간 초과가 걸려서 정답으로 처리가 되지 않더라고요 결국에는 저도 아스키 코드르 사용하여서 해결하였습니다.

 

26개의 배열을 만들고

해당 알파벳이 출력될때마다 해당 배열이 1씩 증가하는 코드를 넣은 후

그 증가할때마다 최대값과 비교하여 증가한 값이 최대 값보다 크면 최대 값에 증가한 값을 넣고

결과에도 그 최대 값에 해당하는 알파벳을 넣습니다.

만약에 최대값과 증가한 값의 크기가 동일하다면 결과값에 ?를 넣어주는 형식으로 코드를 만들었습니다.

 

정답

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        int[] count = new int[26];
        
        int max = -1;
        char result = '?';
        
        String s = sc.next();
        s = s.toUpperCase();
        
        for(int i = 0; i < s.length(); i++){
            count[s.charAt(i) - 'A']++;
            if(max < count[s.charAt(i) - 'A']){
                max = count[s.charAt(i) - 'A'];
                result = s.charAt(i);
            }else if(max == count[s.charAt(i) - 'A']){
                result = '?';
            }
        }
        
        System.out.println(result);
    }
}

이클립스로 돌렸을 때는 1초도 안걸렸는데..큰 프로젝트에서는 0.001초도 줄려야 하는게 맞으니깐 이렇게 해결하는게 맞는거 같습니다.