hye-log

[백준]1157번 단어 공부(JAVA) 본문

CodingTest/Baekjoon

[백준]1157번 단어 공부(JAVA)

iihye_ 2023. 8. 13. 02:22

0. 문제 링크

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

 

1157번: 단어 공부

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

www.acmicpc.net

 

1. 문제 설명

1) 주어진 문자열에서 가장 많이 사용된 알파벳을 대문자로 출력하기

 

2. 입출력

// input1
Mississipi

// output1
?

// input2
zZa

// output2
2

 

3. 코드

import java.util.*;

public class b1157 {
	public static void main(String[] args) {
		int[] alphabet = new int[26]; // 알파벳 계수기
		int max = -1; // 최대값 찾기
		int maxIdx = -1; // 최대값의 인덱스
		char ans = ' '; // 가장 많이 사용된 알파벳
		
		// 1. 입력
		Scanner sc = new Scanner(System.in);
		String str = sc.next();
		
		// 2. 문자열에서 한 글자씩 개수 세기
		str = str.toUpperCase(); // 대문자로 변경
		for (int i = 0; i < str.length(); i++) { // 입력된 문자열의 개수만큼 반복
			alphabet[str.charAt(i) - 'A']++; // 아스키 코드 활용
		}
		
		// 3. 가장 많이 사용된 알파벳 찾기
		for (int i = 0; i < alphabet.length; i++) { // 알파벳 개수만큼 반복
			if(max < alphabet[i]) { // 최대값을 찾았다면
				max = alphabet[i]; // 최대값을 max에 저장
				maxIdx = i; // 최대값의 인덱스를 maxIdx에 저장
			} else if (max == alphabet[i]) { // 현재 최대값과 같다면
				maxIdx = -1; // -1을 maxIdx에 저장
			}
		}
	
		// 4. 정답 출력
		if(maxIdx == -1) { // maxIdx가 -1이라면
			ans = '?'; // 가장 많이 사용된 알파벳이 여러 개 존재하므로 ? 출력
		} else { // 최대값이 정상적으로 들어가 있다면
			ans = (char) ('A' + maxIdx); // 'A'에서 maxIdx만큼 더한 char 문자를 출력
		}		
		System.out.println(ans);
	}
}

 

실행 결과

 

4. 회고

1) 입력 받은 문자열을 toUpperCase()로 대문자로 변경한 뒤 한 글자씩 알파벳의 개수를 셈

2) max 변수를 활용하여 가장 많이 사용된 알파벳을 찾고, 중복되는 경우 -1을 maxIdx에 저장함

 

5. Github

https://github.com/iihye/Algorithm/blob/main/Baekjoon/b1157.java

 

728x90
Comments