DINGA DINGA
article thumbnail
Published 2021. 7. 19. 17:23
[백준] 1157번: 단어 공부 JAVA/BOJ
728x90

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

 

1157번: 단어 공부

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

www.acmicpc.net

 

코드

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String s = sc.next().toUpperCase();	// 문자열 입력 받음
		int check[] = new int[26];
        
		for (int i = 0; i < s.length(); i++)	// 문자 등장 횟수 카운트
			check[s.charAt(i) - 'A']++;
            
		int max = check[0];
		for (int i = 0; i < check.length; i++) {	// max 업데이트
			if (check[i] > max) 
				max = check[i];
		}
        
		int cnt = 0, idx = 0;
		for (int i = 0; i < check.length; i++) {	// 가장 많이 등장하는 문자 체크
			if (max == check[i]) {
				cnt++;
				idx = i;
			}
			else if (cnt >= 2) break;
		}
        
		if (cnt == 1)
			System.out.println((char)(idx + 'A'));
		else System.out.println("?");
		sc.close();
	}
}

 

설명

맨 처음 입력받은 문자열을 대문자화하여 저장한다.

정수 배열로 문자열의 아스키코드를 이용해 해당 문자의 등장 빈도수를 카운트한다.

이후 for문을 이용해 가장 많이 등장하는 문자의 빈도수를 max에 저장한다.

다른 for문으로 max만큼 등장하는 문자가 몇 개 있는지 cnt에 저장하고, 해당 인덱스를 idx에 저장한다.

만약 cnt가 1이면 max만큼 등장하는 문자가 하나 있는 것이므로 해당 문자의 인덱스에 'A'(65)를 더한 값을 char형으로 변환하여 출력한다.

cnt가 1이 아니라면 max만큼 등장하는 문자가 여러 개이므로 '?'를 출력한다.

728x90

'JAVA > BOJ' 카테고리의 다른 글

[백준] 2675번: 문자열 반복  (0) 2021.07.19
[백준] 1929번: 소수 구하기  (1) 2021.07.18
[백준] 4153번: 직각삼각형  (0) 2021.07.18
[백준] 1546번: 평균  (0) 2021.07.11
[백준] 2753번: 윤년  (1) 2021.07.11