본문 바로가기
Problem Solving/백준

[백준|자바] 1157: 단어 공부

by 청량리 물냉면 2021. 8. 27.
반응형
문제

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);

		int[] alphabet = new int[26];
		String word = sc.nextLine();
		int max = 0;
		int cnt = 0;	//중복 카운팅
		
		for(int i = 0; i < word.length(); i++) {	//테스트케이스 수만큼 반복
			int s = word.charAt(i);	//해당 문자열의 인덱스0부터 문자 한 글자씩 s에 저장 
			
			if('a' <= s && s <= 'z' ) {	//s가 소문자인 경우
				alphabet[s - 'a']++;	//해당 인덱스 카운트 증가
			} else if('A' <= s && s <= 'Z' ) {	//s가 대문자인 경우
				alphabet[s - 'A']++;
			}
		}
		
		for(int i = 0; i < alphabet.length; i++) {		//최댓값을 저장한 인덱스 찾기
			if(alphabet[max] < alphabet[i]) {
				max = i;	//해당 인덱스 저장
			}
			if(alphabet[max] < alphabet[0]) {
				max = 0;
			}
		}
		
		for(int i = 0; i < alphabet.length; i++) {	//중복 확인
			if(alphabet[i] == alphabet[max]) {	
				cnt++;
			} 
		}
		
		if(cnt == 1) {	//중복이 존재하지 않을 경우
			System.out.println((char)('A' + max));
		} else if(cnt > 1) {	//중복이 존재할 경우
			System.out.println("?");
		}
				
		sc.close();
	}
}

 

 

마무리

아스키 문자열 소문자 대문자 처리 + 중복 문자 처리 + 최댓값 찾기 복합적으로 들어있었던 문제.

대소문자 인덱스 저장할 때는 저번에 풀었던 알파벳 찾기 문제를 다시 한 번 참고했다. 

[백준 알고리즘] 11809: 알파벳 찾기 풀이(자바)

 

[백준 알고리즘] 11809: 알파벳 찾기 풀이(자바)

문제 https://www.acmicpc.net/problem/10809 10809번: 알파벳 찾기 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만

florescene.tistory.com

max를 어떻게 처리해야 중복제거를 할 수 있을지 고민하다가 for문을 하나 더 만들어 max 인덱스의 값과 전체 알파벳 배열을 한번씩 비교해 중복 갯수를 카운팅하는 식으로 구현했다.

온전히 혼자 풀었던 문제. 더 효율적인 답이 있을지 모르겠다. 
 

 

반응형