본문 바로가기

건승하고있어요/알고리즘

[문자열사용하기] 단어공부

반응형

문제: 알파벳 대소문자로 된 단어가 주어지면 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단 대소문자를 구분하지 않는다.

(출처: https://www.acmicpc.net/problem/1157)



정말 오랜만에 문제를 풀었다.

고단하다. 내가 아무 쓸모 없는 사람인거 같은 기분이 들 때가 많다.

그냥 다른 생각이 하고 싶어서, 다른 곳에 집중하고 싶어서 진짜 오랜만에 풀었다.

오랜만에 하려니 생각이 잘 나질 않았다.

어떻게 문제를 해결해 갈지 순서를 잘 정해서 풀어야 하는데, 그냥 또 막 풀다보니 변수 남발의 막무가내 코드가 나왔다. 잇힝

어찌 풀 때마다 같은 얘기를 반복하는 기분이 든다. 아흥


1. 입력을 받는다.

2. 입력받은 문자를 모두 소문자로 바꿔준다.

3. 입력받은 문자를 배열에 넣어준다.

4. 어떤 문자가 쓰였는지 확인하기 위한 알파벳 26개의 배열을 만든다.

5. 결과를 보여주기 위한 알파벳 대문자 26개의 배열을 만든다.

6. 어떤 문자가 쓰였는지 알파벳에 카운트를 올려준다.

7. 카운트된 배열들이 같은 숫자가 있는지 확인한다.

8. 같은 카운트를 기록한 애가 2개 이상 있으면 ?, 아니면 가장 큰 카운트에 속한 알파벳을 보여준다.


for(int i=0 ; i<voca.length() ; i++) {
            vocas[i] = VOCA.charAt(i);
            result = vocas[i] - 'a';
            num[result]++;
            if(max < num[result]) {
                max = num[result];
                maxx = result;
                
            }
        }


알파벳 배열 선언을 할 때 


        char alpha [] = {'A''B''C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

이렇게 선언을 했으니, alpa[0]=A, alpha[1]=B 이렇게 된다.

아스키코드를 활용해서 '입력받은 알파벳 - a'를 적용하면 숫자가 나온다. a-a=0, a-b=1, a-c=2 ... 이런식으로 하다보면 각각의 나머지 숫자가 나오고 그 숫자를 alpha배열에 넣어주면 각각에 맞는 알파벳이 나오는 것!!!!! 





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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.util.Scanner;
 
public class VocaStudy {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String voca = scan.next();
        String VOCA = voca.toLowerCase();
        int num [] = new int [26];
        char vocas [] = new char [voca.length()];
        char alpha [] = {'A''B''C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
        int result = 0;
        int max = num[0];
        int maxx = 0
        int b = 0;
        boolean a = false;
        for(int i=0 ; i<voca.length() ; i++) {
            vocas[i] = VOCA.charAt(i);
            result = vocas[i] - 'a';
            num[result]++;
            if(max < num[result]) {
                max = num[result];
                maxx = result;
                
            }
        }
        
        for(int i=0 ; i<26 ; i++) {
            if(max == num[i]) {
                b++;
                if( b>1) {
                    a=true;
                }
            }
        }
        if(a == true) {
            System.out.println("?");
        } else {
            System.out.println(alpha[maxx]);
        }
        
 
        
        
        scan.close();
    }
}
 
cs




반응형