본문 바로가기
CODING/BAEKJOON

[BAEKJOON] 1157번 단어 공부

by snow_white 2022. 1. 28.

문자열을 이루는 각 문자의 아스키코드 값을 활용하여 풀이에 접근한다.

a~z까지 담을 수 있는 26 크기의 int형 배열을 선언한다.

a부터 인덱스 0번이라 가정하면, b는 인덱스 1번, ... , z는 인덱스 25번이다.

입력 받은 문자열의 각 문자마다 아스키코드 값을 받아 대·소문자의 경우를 나누어 판단한다.

소문자일 경우 a=97, b=98, ... 이므로 alphabet[n-97]++;

대문자일 경우 A=65, B=66, ... 이므로 alphabet[n-65]++; 

위의 방식으로 배열에 문자 개수를 카운트한다.

모든 문자의 개수가 카운트 되면 가장 빈도수가 많은 단어(배열에 저장된 수 중 최댓값 이용)를 출력해야 한다.

고려해야 할 점, 카운트 개수가 가장 크다고 해서 유일한 최댓값이 아닐 수 있다.

최댓값이 하나가 아니라면 "?" 를 출력한다.

대소문자 아스키코드(10진수)

package BaekJoon;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;

public class BaekJoon1157 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		String st = br.readLine();
		int alphabet[] = new int[26];
		int max = 0;
		
		for(int i=0; i<st.length(); i++) {
			int n = st.charAt(i);
			if(n < 91) {
				alphabet[n-65]++;
			}
			else {
				alphabet[n-97]++;
			}
		}
		for(int i=0; i<26; i++) {
			if(alphabet[i] >= alphabet[max]) {
				max = i;
			}
		}
		for(int i=0; i< 26; i++) {
			if(i!=max && alphabet[max]==alphabet[i]) {
				bw.write('?');
				bw.close();
				return;
			}
		}
		char ch = (char) (max + 65);
		bw.write(ch);
		bw.close();
	}
}

[출처]

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

 

1157번: 단어 공부

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

www.acmicpc.net

 

'CODING > BAEKJOON' 카테고리의 다른 글

[BAEKJOON] 5622번 다이얼  (0) 2022.01.29
[BAEKJOON] 2908번 상수  (0) 2022.01.28
[BAEKJOON] 10809번 알파벳 찾기  (0) 2022.01.27
[BAEKJOON] 11720번 숫자의 합  (0) 2022.01.27
[BAEKJOON] 2523 별 찍기 - 13  (0) 2022.01.26

댓글