[알고리즘] 백준 1157 -문자열

ho's·2022년 3월 29일
0

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

위의 문제이다.

위의 문제처럼, 알파벳 소문자 대문자와 관계없이 가장 많이 쓰인 문자를
대문자로 출력하라는 문제이다.
만약 가장 많이 사용되는 문자가 중복된다면 ?를 출력하라!

위 문제를 풀기위해

  1. 문자열을 입력을 코드 작성
  2. 알파벳의 배열을 만들어, 한 개씩 체크를 한 후 count하는 코드 작성
  • 대문자와 소문자의 구별 없이 받는 코드는 어떻게 작성할 것인가?
  1. count한 것이 중복되었을때 ?를 출력하는 코드

위와 같이 생각을 해보았다. 1,2번까지는 얼추 했는데,,

위와 같이 대소문자와 관계없이
a,A => arr[0]
b,B => arr[1]
c,C => arr[2]
d,D => arr[3]
e,E => arr[4]
f,F => arr[5]
...
z,Z => arr[25]에 넣고 싶다.

내힘으로는 풀이가 안되어 풀이를 보고 작성하겠다.

arr[] 배열에 입력한 각 자리수에 문자의 개수를 넣었으니, 이제 count하는 코드를 작성해보자.

package baekjoon.solution;
import java.util.Scanner;

public class Baekjoon_1157 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        String str = scan.next();
        int[] arr = new int[26];
        // arr[0] = a , A
        // arr[1] = b , B
        // arr[2] = c , C
        // arr[3] = d , D
        // ...
        // arr[25] = z,Z
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)>='A' && str.charAt(i)<='Z'){
                arr[str.charAt(i)-'A']++;
                // 대문자일 때,
            }else{
                arr[str.charAt(i)-'a']++;
                //소문자일 때,
            }
        }

        int max = 0;
        char result = '?';
        for(int i=0;i<26;i++){
            if(arr[i]>max){
                max = arr[i];
                result = (char)(i+65);
            }else if(arr[i] == max )
                result ='?';
        }
        System.out.println(result);
    }
}

끝!

profile
그래야만 한다

0개의 댓글