본문 바로가기
프로그래밍/백준 알고리즘 코드

백준 1157 java 자바 단어 공부 [문자열]

by 졸린이 2020. 9. 19.
반응형

백준 1157 java 자바 단어 공부 [문자열]

알파벳 대소문자 구분 않고 입력하면 가장 많이 쓰인 알파벳을 대문자로 출력하는 프로그램이다.

가장 많이 쓰인 알파벳이 여러개일 경우는 '?'를 출력한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.Scanner;
 
//baekjoon_1157
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String st = sc.nextLine().toUpperCase();
        int cnt[] = new int[26];
        int max = 0;
        char result = 'c';
        
        int index;
        for(int i=0; i<st.length(); i++) {
            index = st.charAt(i)-65;
            
            cnt[index]++;
            if(max < cnt[index]) {
                max = cnt[index];
                result = st.charAt(i);
            } else if(max == cnt[index])
                result = '?';
        }
        System.out.println(result);
    }
}
cs

line 7 : 문자열을 입력받고 toUpperCase() 함수로 문자를 대문자로 변환한다.

line 8 : A~Z까지 총 26개이므로 26개의 배열을 선언한다.

line 9 : 가장 많이 사용된 알파벳을 찾기 위해 비교하는 변수.

line 10 : 결과를 출력해줄 char 변수다. 초기화를 해야하므로 아무 문자나 집어 넣은것.

line 12 : 각 알파벳의 배열 위치를 찾기위한 변수.

line 13 : st Stirng 크기 만큼 반복

line 14 : charAt() 메소드로 각 문자를 추출하고 -65를 하여 index에 집어 넣는다.

-65를 하는 이유는 A가 아스키코드값으로 65이므로 -65를 하여 cnt[0] 으로 접근하기 위함이다.

A는 cnt[0] B는 cnt[1] ... Z는 cnt[25] 에 접근하여 원소값을 하나 올려준다. (16행)

알파벳 하나가 나오면 cnt 해당 원소를 1 올려주는 것이다.

line 17, 18 : max와 비교하여 방금 올린 값이 더 높으면 max를 변경해준다.

line 19 : 위 if문에 들어가면 result도 마찬가지로 변경한다.

line 20, 21 : 만약 max와 cnt[index]값이 같으면 가장 많이 사용된 알파벳이 두 개 나온것이므로 다음 더 큰게 나오기 전까지는 result를 ? 로 변경해둔다.

line 23 : for문이 끝나면 result를 출력.

 

 

 

 

반응형

댓글