반응형
첫번째 풀이. 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));
}
}
반응형
'Backjoon' 카테고리의 다른 글
[백준 2908] 상수 - java 풀이 (0) | 2018.10.28 |
---|---|
[백준 1152] 단어의 개수 - java 풀이 (0) | 2018.10.28 |
[백준 2675] 문자열 반복 문제 java 풀이 (0) | 2018.10.27 |
[백준 10809] 알파벳 찾기 -java (2) | 2018.10.27 |
[백준 1316] 그룹단어체커 (0) | 2018.05.03 |