개발자 미니민의 개발스터디

[백준 JAVA] 1157번 풀이 - 단어 공부

by mini_min
package baekjoon;
import java.util.Scanner;
/**
* 단어 공부
* 알파벳 대소문자가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지
* 알아내는 프로그램을 작성한다.
* 대소문자는 구분하지 않는다!
* 1. 첫줄에 단어가 입력된다.
* 2. 가장 많이 사용된 알파벳을 대문자로 출력한다.
* 만약, 가장 많이 사용된 알파벳이 여러 개 존재하면 ?를 출력한다.
*
*/
public class _1157 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
s = s.toUpperCase();
int [] arr = new int[s.length()];
int [] count = new int[26];
for ( int i = 0; i < s.length(); i++ )
{
arr[i] = (char) (s.charAt(i)-65);
}
for ( int i = 0; i < arr.length; i++ )
{
count[arr[i]]++;
}
int max = -1;
boolean same = false;
int num = 0;
for ( int i = 0; i < count.length; i++ )
{
//System.out.println((char)(i+65) + "개수 " + count[i]);
if ( count[i] > max )
{
max = count[i];
num = i;
same = false;
}
else if ( max > 0 && max == count[i] )
{
same = true;
}
}
if ( same )
{
System.out.println("?");
}
else
{
System.out.println((char)(num+65));
}
sc.close();
}
}

 

풀이 방법

"아스키 코드" 라는 점을 활용해 알파벳의 count 개수를 세는 배열을 만들면 되겠다고 생각했다. 

그래서 알파벳에 -65 한 값을 배열에 저장해서 count[arr[i]] 배열을 만들었고 개수를 저장했다.

 

그 이후에는 큰 값을 비교했고, 만약 max 가 1개 이상 + 그런데 max 값과 비교하는 값이 같은 경우가 있다면 same 을 true 로 변경했다. for 문이 끝날 때 까지 same = true 일 경우를 처리했다. 

 

 

 

블로그의 프로필 사진

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기