단어 공부

곽지욱·2023년 9월 6일

BOJ

목록 보기
12/69
post-thumbnail

백준 1157번 : 단어 공부 B1

1157번: 단어 공부

  • 모든 알파벳이 출력 될 때는 대문자로 출력된다

  • 가장 많이 반복된 문자가 2개 이상일 경우 ‘?’ 을 출력함

  • 먼저 알파벳 26글자를 입력받기에 앞서 각 문자들의 빈도수를 나타내기 위한 배열을 하나 선언하고 문자열 s를 입력받음

Scanner in = new Scanner(System.in);

        int [] arr = new int[26]; //영문자의 개수는 26개임
        String s = in.next();
  • 문자열 s에 대하여 0부터 마지막 문자 까지 검사하기 위해 반복문을 작성한다 → 검사한다 ? 단어가 몇 번 반복되는지

  • 반복문을 돌면서 해당 문자가 어떤 문자인지, 해당 배열 원소를 증가시켜주어야 함

import java.util.Scanner;

public class String_1 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int [] arr = new int[26]; //영문자의 개수는 26개임
        String s = in.next();

        for(int i = 0; i<s.length();i++){//문자열 s에 대하여 첫 번째 문자 부터 마지막 문자까지 검사하기 위한 반복문을 작성해줌

            if('A'<= s.charAt(i) && s.charAt(i)<='Z'){
                arr[s.charAt(i) - 65]++; //i가 0이고 a로 시작하는 문장을 입력했을 경우, a의 아스키 코드 값은 97 97- 97 = 0
                //즉 , arr[0]번 인덱스가 ++되면서 1이됨
            }
            else { //소문자 범위
                arr[s.charAt(i)- 97]++;
            }
        }
        //알파벳을 담을 int 형 배열 선언
        //문자열 s를 입력받음

        //for문을 돌면서 대문자 범위내에 있는 단어 하나를 배열 arr의 인덱스 값에 넣어준다

        int max = -1;
        char ch = '?'; //가장 많이 사용되는 단어가 여러개일 경우

        for(int i=0; i<26; i++){
            if(arr[i]> max ){
                max = arr[i];
                ch = (char )(i+65); //대문자를 출력해야 하므로 65를 더해준다
            }
            else if (arr[i] == max ){
                ch ='?';
            }
        }

        System.out.print(ch);

        //lovee를 입력했을 경우
        //        arr[11] = 1
        //        arr[14] = 1
        //        arr[21] = 1
        //        arr[4] =  2
        //        두 번째 for 루프에서 i = 4일 때 arr[4] > max 조건이 만족되어 max의 값은 2가 되고, 'E'의 아스키 코드는 69이므로 ch에 'E'가 저장됩니다.

    }
}
  • 입력 값이 ‘abca’ 일 경우 소문자 범위에 해당하기 때문에 첫 번째 for문에서 i = 0 일 때, arr[s.charAt(0)번 인덱스 즉, a → 97 - 97은 0 이므로

  • i가0일 때 , arr[0]번 인덱스가 증가하면서 1이 됨

  • 그렇게 b, c 모두 1번 2번 인덱스에 해당하면서 arr[0] ,1 ,2 번 인덱스 의 값이 모두 1이 됨

  • i 가 3일 때 a가 한번 더 for문에 걸리면서 arr[0]은 2로 증가함

int max = -1;
        char ch = '?'; //가장 많이 사용되는 단어가 여러개일 경우

        for(int i=0; i<26; i++){
            if(arr[i]> max ){
                max = arr[i];
                ch = (char )(i+65); //대문자를 출력해야 하므로 65를 더해준다
            }
            else if (arr[i] == max ){
                ch ='?';
            }
        }

        System.out.print(ch);
  • 0부터 25까지 모든 인덱스를 검사하면서 arr[0] 일때 max인 -1보다 그 수가 크기 때문에 max 값은 2가 되고

  • ch 변수엔 대문자를 출력해야 하므로 65 또는 ‘A’를 더해준다 char 형태로 형 변환을 시켜주는 것

  • 나머지 b,c에 해당하는 arr[1],과 arr[2]는 모두 그 값이 1이고 갱신 된 max의 값인 2보다 작기 때문에 for 문을 빠져나오고 ch를 출력함

0개의 댓글