본문 바로가기
Algorithm/Baekjoon

[백준 알고리즘][자바] 1157번 : 단어 공부

by hyunipad 2021. 5. 12.
반응형

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

 

1157번: 단어 공부

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

www.acmicpc.net

 

문제해설

단어가 주어지면 단어에서 가장 많이 사용된 알파벳의 갯수를 구하는 문제입니다.(대소문자 구분 X)

단, 가장 많이 사용된 알파벳이 여러개일 경우에는 ? 출력

 

예제로 입력 받은 문자열의 길이만큼 반복문을 돌며 사용된 알파벳을 카운트 시켜준다.

카운트 시켜주는 방법은 아스키 코드를 사용한다.

예를 들어 A를 카운트 한다고 하면 배열에서 arr['A' - 65] 라고 하면 A가 아스키 코드로 65이기 때문에

int 배열의 0번째가 카운트 되는 것이다.

 

해결방법

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

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		
		BufferedReader br = new  BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int arr[] = new int[26]; //알파벳의 갯수만큼 배열 선언
		
		String word = br.readLine().toUpperCase(); // 입력 받은 문자열을 대문자로 변경
		
		int max = -1;
		char answer = '?';
		
		for(int i = 0 ; i < word.length() ; i++) { // 문자열의 길이만큼 반복
			arr[word.charAt(i) - 65]++; // 해당 알파벳을 카운트
		}
		
		for(int i = 0; i < arr.length; i++) { // 알파벳의 갯수만큼 반복(최대값을 구하기 위함)
			if(max < arr[i]) {  // 최대값 보다 크다면
				max = arr[i]; 
				answer = (char)(i+'A');
			} else if (max == arr[i]) { // 최대값과 같다면
				answer = '?';
			} // else 는 써주지 않는다. 왜냐하면 작은 값은 필요 없기 때문
		}
		
		bw.write(answer);
		
		br.close();
		bw.flush();
		bw.close();
	}

}

 

 

 

 

반응형

댓글