본문 바로가기
ONLINE JUDGE/문자열

[백준1157] 단어 공부

by W_W_Woody 2022. 3. 10.

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

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net


알파벳 크기의 배열을 생성하고

배열원소를 증가시켜서 그 배열을 순회하여 가장 높은 수의 해당배열을 출력하는 식으로 풀 수 있다.

 

입력받은 문자열에서 대문자와 소문자를 구별하여 배열의 인덱스 값을 구하느냐,

애초에 입력받은 문자열을 대문자로 통일시켜서 구하느냐로 풀 수도 있다.

방법1. for문으로 대소문자 체크 'a' 'z'

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

public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String S = br.readLine();

        int[] arr = new int[26];
		for(int i=0;i<S.length();i++) {
			if('a'<=S.charAt(i) && S.charAt(i) <= 'z') {
				arr[S.charAt(i)-97]++;
			}else {
				arr[S.charAt(i)-65]++;
			}
		}
		
        int max=-1;
		char ch='?';
		for(int i=0;i<26;i++) {
			if(arr[i]>max) {
				max=arr[i];
				ch = (char)(i+65); //값-65해서 인덱스를 구했으니 역으로 인덱스+65
			}else if(arr[i]==max) {
				ch='?';
			}
		}
		System.out.println(ch);
	}
}

방법2. toUpperCase() 대문자로 변경

package s07_string;

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

public class MJ_05_1157_2 {
	public static void main(String[] args) throws IOException{
		//알파벳 26개
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		String S = br.readLine();
		S = S.toUpperCase();
		int[] arr = new int[26];
		
		for(int i=0;i<S.length();i++) {
				arr[S.charAt(i)-65]++;
//				arr[S.charAt(i)-'A']++;
			}
			//대문자아스키코드: 65~90 / 소문자아스키코드: 97~122
			//대문자A(65)를 입력받으면 arr의 인덱스값0는 65-x = 0, x=65
			//대문자C(67)를 입력받으면 arr의 인덱스값2는 67-x = 2, x=65
			//x값 65를 빼주면 arr의 인덱스값을 알 수 있어서 해당인덱스값을 1++해서 카운트가능
		}
		
		//S의 값을 모두 검사 후 카운트 했고
		//가장 큰값의 인덱스의 문자 출력(큰값이 여러개면 ?출력)
		int max=-1; //보통 관행상 음수로 표기
		char ch='?';
		
		for(int i=0;i<26;i++) {
			//배열의 값이 max보다 크면 그값이 max
			if(arr[i]>max) {
				max=arr[i];
				ch = (char)(i+65); //값-65해서 인덱스를 구했으니 역으로 인덱스+65
			}else if(arr[i]==max) {
				ch='?';
			}
		}
		System.out.println(ch);
	}
}

 

 

'ONLINE JUDGE > 문자열' 카테고리의 다른 글

[백준2908] 상수  (0) 2022.03.11
[백준1152] 단어의 개수  (0) 2022.03.11
[백준2675] 문자열 반복  (0) 2022.03.09
[백준10809] 알파벳 찾기  (0) 2022.03.08
[백준11720] 숫자의 합  (0) 2022.03.05

댓글