한 걸음 두 걸음

baekjoon 1157 단어공부 ] 문자열처리 본문

CSE/baekjoon & swexpert

baekjoon 1157 단어공부 ] 문자열처리

언제나 변함없이 2019. 3. 10. 16:37
반응형
import java.util.*;
import java.io.*;

public class Main {

    public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            String str = sc.nextLine();
            int[] alpha = new int[26];
            int result = 0;
            int check = 0;
            int index = 0;

            for(int i = 0; i < str.length(); i++) 
                for(int j = 0; j < 26; j++) 
                    if(str.charAt(i) == 65+j || str.charAt(i) == 97+j) alpha[j]++;


            for(int i = 0 ; i < alpha.length; i++) result = max(result, alpha[i]);
            for(int i = 0 ; i < alpha.length; i++) if(alpha[i] == result) {check++; index = i;}
            if(check > 1) System.out.println("?");
            else System.out.println((char)(index+65));
    }

    private static int max(int a, int b) {
        return a>b?a:b;
    }
}

너무 하드코딩이다..ㅠㅠ

다른 방법으로는

  1. 받은 문자열을 다 toUpperCase()나 toLowerCase로 바꿔준 뒤
  2. 25개의 알파벳이므로 25개의 int배열 안에 나온 값(소문자기준, 문자열(i)-65)을 저장시켜주고
  3. int배열의 첫 번째 값과 나머지와 비교해서 가장 큰 값이 두 개 이상으로 겹치면 ? Flag를 설정해주고, 아니면 최대일 때의 index값을 받아놓는다.
  4. index + 65를 출력해주면 끝.
반응형