[백준] 1157. 단어공부

bonnie·2022년 1월 10일
0

🟢 알고리즘 풀이

목록 보기
21/27
post-thumbnail

문제

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

풀이

문자열을 입력 받은 후, 문자열 내에서 가장 많이 사용된 알파벳을 출력하는 문제. 만약 여러개가 존재한다면 ?를 출력한다.
먼저 알파벳의 개수만큼 int 배열을 만들고 String을 입력 받는다.
String 중 대문자인 경우와 소문자인 경우를 나누어 반복문을 돌린다.

대문자인지 확인하는 방법
1) if(Character.isUpperCase(str.charAt(i)))
2) if(65 ≤ str.charAt(i) && str.charAt(i) ≤ 90)

대문자의 경우에는 A의 십진법 값인 65를, 소문자의 경우에는 a의 십진법 값인 97을 빼서 해당 알파벳의 배열 값을 카운트 해준다.
그리고 가장 최대값을 가진 알파벳을 출력하기 위해 배열 값들을 비교해 최대값을 찾아주고, 최대값이 존재하면 배열 인덱스 값인 i 와 대문자 시작값인 65를 더해준 다음 char형으로 형변환 해준다.
그러나 배열 탐색 중 최대값과 동일한 배열값이 나타나면 '?'를 출력한다.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

// title : 단어공부
public class Q_1157 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str = br.readLine();
		int[] arr = new int[26];
		
		for(int i = 0; i < str.length(); i++) {
			if(Character.isUpperCase(str.charAt(i))) {
				arr[str.charAt(i) - 65]++;
			}else {
				arr[str.charAt(i) - 97]++;
			}
		}
		
		int max = -1;
		char ch = '?';
		for(int i = 0; i < arr.length; i++) {
			if(arr[i] > max) {
				max = arr[i];
				ch = (char)(i + 65);
			}else if(arr[i] == max) {
				ch = '?';
			}
		}
		System.out.println(ch);
	}
}
profile
괴발🐱개발🐶

0개의 댓글