Study/알고리즘

백준 1157번 - 단어 공부 JAVA

토기발 2022. 7. 28. 15:59

 

이 문제는 글자 하나하나 떼어서 세는건 저번 알고리즘 문제때 했던 charAt()로 하면 될 것 같은데 알파벳-알파벳의 개수 를 같이 저장시키는걸 어떻게 해야하나에서 고민을 했다. (배열의 자리가 해당 알파벳, 해당 자리의 값을 중복값으로 해결했다)

그리고 .length 로 할 때 빨간줄이 떠서 당황했는데 배열이 아니라 문자의 길이인 경우에는 .length() 를 써야했다.

마지막으로 char형을 쓸 일이 은근 많은 듯 해서 아스키코드를 첫글자정도는 외워둬야 한다는 생각이 들었다. A는 65 a는 97...

 


 

 

import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner in = new Scanner(System.in);
		int alphabet[] = new int[26]; //알파벳 저장할 배열
		String str = in.next(); //문자 받기
		str = str.toUpperCase(); //모두 대문자로 바꾸기
		for(int i=0; i<str.length(); i++) { 
			alphabet[str.charAt(i)-'A']++;
			//문자 하나씩 떼서 A 뺀 숫자 = 알파벳 순서 자리에 들어감(A=0, B=1번째 자리)
			//만약 중복값이 있다면 alphabet[str.charAt(i)-'A']의 값이 늘어난다
		}
		int max = 0, result = 0; 
		//max = 문자 안에 들어간 해당 알파벳의 개수(중복이 가장 많은 알파벳의 개수로 바뀌게 됨) / result = 해당 알파벳 
		for(int i=0; i<alphabet.length; i++) {
			if(max < alphabet[i]) {
				max = alphabet[i]; //더 중복 많은 개수로 바뀜
				result = i;
			}
			else if(max == alphabet[i]) { //가장 큰 수가 중복
				result = -2; // ?의 아스키코드값이 63이라 A보다 2 작다
			}
		}
		System.out.printf("%s" , Character.toString((char)(result+'A')));		
		//%s = 문자열이기 때문에 char형을 String으로 형변환해야 한다.
	}
	
}

 

설명은 주석에...