백준 문제풀기/JAVA

[백준 1157 JAVA 자바] 단어 공부

냉동피자 2023. 7. 29. 23:43

String을 입력 받은 이후

가장 많이 사용된 알파벳을 출력하거나

?를 출력합니다

 

대소문자를 구분하지 않는다와

중복 최대숫자인경우는 ?를 출력하는게

이문제의 핵심이네요

 

1. String을 입력받아 전부 대문자로 고칩니다 (대소문자를 구분하지 않기 때문에)

2. 나온 알파벳의 개수를 구하기 위해 int[] arr = new int[26];을 만듭니다 (알파벳은 26개이기 때문에)

3. 중복 최대숫자인지 체크합니다

 

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
				
		String str = scan.nextLine();
		
		str = str.toUpperCase();
		
		int n = str.length();
		int[] arr = new int[26];
		
		for(int i=0;i<n;i++) {
			arr[str.charAt(i)-65] +=1;
		}
		
		int max = 0;
		
		for(int i=0;i<26;i++) {
			if(arr[i]>max) {
				max=arr[i];
			}
		}
		
		int count = 0;
		int where=0;
		
		for(int i=0;i<26;i++) {
			if(arr[i]==max) {
				count+=1;
				where =i;
			}
		}		
		
		if (count==1) {
			System.out.println((char)(where+65));
		}else {
			System.out.println("?");
		}
	}
}

 

str.toUppercase()는 소문자를 전부 대문자로 바꿔줍니다

str.toLowercase()는 대문자를 전부 소문자로 바꿔줍니다

 

str.charAt(i)는 str의 i번째 있는 char를 추출합니다

charAt(i) - 65를 하는 이유는

아스키코드에서 대문자 A가 10진수로 65이기 때문입니다

 

arr[0]에는 A가 나온 횟수

arr[1]에는 B가 나온 횟수...

이렇게 저장되게 됩니다

 

마지막 System.out.println((char)(where + 65))로 쓴 이유도

where +65 인 10진수를

char(아스키코드)로 바꾸는 과정입니다