본문 바로가기

Backjoon

[백준 1157] 단어 공부 java 풀이

반응형




첫번째 풀이. HashMap을 사용해서 알파벳과 갯수값 저장하는 방법.

처음에는 알파벳 값을  HashMap 을 사용해

<Charater, Integer>형태로 저장한 후, 해당 값을 for  루프를 돌면서 최대 값을 찾는 로직을 구현했다.

import java.util.HashMap;
import java.util.Scanner;
public class OneHour {
       public static void main(String[] args) {
             Scanner sc = new Scanner(System.in);
             String input = sc.nextLine().toUpperCase();
             HashMap <Character, Integer> hm = new HashMap<Character, Integer>();
             char arr[] = input.toCharArray();
             
             for (int i = 0 ; i < arr.length ; i ++)
             {
                    if( hm.containsKey(arr[i]))
                    {
                           hm.put(arr[i],hm.get(arr[i])+1);
                    }else
                    {
                           hm.put(arr[i], 1);
                    }
             }
             
             int max = Integer.MIN_VALUE;
             char maxChar =' ';
             boolean isSameKing = false;
             
             for(Object key : hm.keySet())
             {
                    int val = hm.get(key);
                    if(max == val)
                    {
                           isSameKing = true;
                    }
                    if(val > max)
                    {
                           max = val;
                           maxChar = (char)key;
                           isSameKing = false;
                    }
             }
             
             if(isSameKing)
                    System.out.println("?");
             else
                    System.out.println(maxChar);
       }
}



하지만 다른 사람들의 풀이를 보니, 배열 26개를 선언해서 풀이한 방법들이 많이 보였다. 해당 생각해보니 INPUT의 범위가 영어 대소문자로 정해져 있어서 배열을 통해서 처리하는 방법이 더 깔끔해 보였다.

두번째 풀이. 배열을 이용한 방법


import java.util.HashMap;
import java.util.Scanner;
public class OneHour {
       public static void main(String[] args) {
             Scanner sc = new Scanner(System.in);
             String input = sc.nextLine().toUpperCase();
             int arr[] = new int[26];
             boolean isSameTop = false;
             int topIndex = 0;
             char arrStr[] = input.toCharArray();
             
             for (int i = 0 ; i < arrStr.length ; i ++)
             {
                    arr[arrStr[i]-'A']++;
             }
             
             for(int max = arr[0], i = 1 ; i < 26 ; i++)
             {
                    if(max == arr[i])
                           isSameTop = true;
                    else if(max < arr[i])
                    {
                           max = arr[i];
                           isSameTop = false;
                           topIndex = i;
                    }
             }
             
             if(isSameTop)
                    System.out.println("?");
             else
                    System.out.println(Character.toChars('A'+topIndex));
       }
}


반응형