(Java/Java) 백준1157 – 단어공부

  • by

(Java/Java) 1157 – 단어 공부

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

문제

알파벳 대문자와 소문자 단어가 주어지면 이 단어에서 가장 많이 사용되는 알파벳이 무엇인지 확인하는 프로그램을 만듭니다.

다만, 대문자와 소문자를 구별하지 않는다.

입력

첫 번째 줄에는 알파벳 대문자와 소문자 단어가 주어집니다.

주어진 단어의 길이는 1,000,000을 초과하지 않습니다.

출력

첫 번째 줄에 대문자로 이 단어에서 가장 많이 사용되는 알파벳을 출력합니다.

다만, 가장 많이 사용된 알파벳이 복수 존재하는 경우에는 ? 를 출력한다.

입력 예 1 복사

Mississipi

출력 예 1 복사

?

샘플 입력 2 복사

zZa

출력 예 2 복사

Z

입력 예 3 복사

z

출력 예 3 복사

Z

입력 예 4 복사

baaa

출력 예 4 복사

A

로직 1

  • 입력된 캐릭터 라인의 대문자와 소문자를 구별하지 않고, 결과치로서 가장 자주(잘) 사용되는 알파벳을 대문자로 돌려줄 필요가 있기 때문에, 입력 캐릭터 라인을 toUpperCase 메소드도 대문자 변환
  • 가장 사용되고 있는 알파벳이 복수 존재할지 어떨지를 기록하는 boolean 형 flag 선언 (초기값 false)
  • 가장 많이 사용된 알파벳 색인이 포함된 maxIndex 선언
  • 가장 많이 사용되는 알파벳 사용 횟수를 포함한 maxValue 선언
  • ‘A’~’Z’의 사용 횟수를 인덱스의 0번~26번까지 넣은 alphabetAr 선언
    • for 문을 돌리는 동안 alphabetArr의 각 색인 채우기
    • for(int i=0; i
      alphabetArr(str.charAt(i)-‘A’)++;
      }
  • alphabetArr을 돌리면서 maxValue와 비교하고,
    • alphabetArr – maxValue > 0인 경우 maxValue에 alphabetArr을 재할당
    • maxValue가 업데이트되면 플래그는 false로 변경
    • alphabetArr – maxValue == 0인 경우 가장 많이 사용되는 알파벳이 여러 개 있으므로 true로 변경
  • flag가 true이면 “?”출력
  • true가 아닌 경우 (char) (maxIndex + ‘A’) 출력

코드 1

import java.util.*;
import java.io.*;

public class Main{
    public static void main(String() args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine().toUpperCase();
        boolean flag = false;
        int maxValue = 0;
        int maxIndex = 0;
        
        int() alphabetArr = new int(26);
        for(int i=0; i<str.length(); i++){
            alphabetArr(str.charAt(i)-'A')++;
        }
        
        for(int i=0; i<26; i++){
            int compare = alphabetArr(i)- maxValue;
            if(compare > 0){
                 maxValue = alphabetArr(i); 
                 flag = false; 
                 maxIndex=i;
            } else if(compare == 0 ) flag = true;            
        }        
        if(flag) System.out.println("?");
        else System.out.println((char)(maxIndex+'A'));        
    }    
}

로직 2

로직 1과 다른 부분

  • maxIndex 대신 가장 자주 사용되는 알파벳이 포함된 char형 maxChar 선언
  • flag 선언 x
  • maxValue가 업데이트되면 maxChar에 “?” 할당
  • 반환시 (char) (maxIndex + ‘A’) 출력

코드 2

import java.util.*;
import java.io.*;

public class Main{
    public static void main(String() args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine().toUpperCase();
        int maxValue = 0;
        char maxChar = 0;
        
        int() alphabetArr = new int(26);
        for(int i=0; i<str.length(); i++){
            alphabetArr(str.charAt(i)-'A')++;
        }        
        for(int i=0; i<26; i++){
            int compare = alphabetArr(i)- maxValue;
            if(compare > 0){
                 maxValue = alphabetArr(i); 
                 maxChar = (char)('A'+i);
            } else if(compare == 0 ) maxChar="?";            
        }        
        System.out.println(maxChar);        
    }    
}