Bakejoon/Bronze

[Java] 백준 1157번 : 단어공부 <Bronze 1>

chattymin 2022. 5. 23. 20:14
728x90
반응형

⚠️ 내맘대로 작성한 코드이기 때문에 비합리적 진행과 근거없는 추론이 있을 수 있습니다!⚠️

 

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

 

1157번: 단어 공부

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

www.acmicpc.net

Code


import java.util.Scanner;

public class Baekjoon1157 {
    public static char Frequence(String str){
        int count[] = new int[27];
        int max = 0, index = 0, bool = 0;
        str = str.toLowerCase();

        for(int i = 0; i < str.length(); i++) {
            count[(int) str.charAt(i) - 97]++;
            if (max < count[(int) str.charAt(i) - 97]) {
                max = count[(int) str.charAt(i) - 97];
                index = (int) str.charAt(i) - 97;
            }
        }

        for(int i = 0; i < count.length; i++){
            if(max == count[i]){
                bool++;
                if(bool > 1)
                    return '?';
            }
        }
        return(char)(index+65);
    }

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

        String arr = scan.nextLine();
        System.out.println(Frequence(arr));
    }
}

Code 필수 요소

1. 대소문자 처리 방법

2. 최빈값 중복 확인

 

이것만 생각해내면 절반은 끝났다.

 

// 대소문자 처리 방법

난 그냥 귀찮아서 싹다 소문자로 만들었다 ㅋㅋㅋㅋㅋㅋ if문으로 요래조래 하면 되긴 할텐데 귀찮아서... 한방에 끝내버림

 

// 최빈값 중복 확인

이걸 for문으로 짜기 싫어서 안간힘을 써봤는데 결국 실패했다. 아무래도 자바를 잘 못하다보니 내장 매서드라던가 이런거 활용이 약하다.

일단 내가 작성한 코드를 보면 애초에 리스트에 값을 집어넣으면서 최빈값의 등장 횟수를 max에 기록해두었다. 그래서 다시한번 리스를 전체 탐색하면서 max값이랑 같은게 있는지 체크해서 있을경우 바로 return '?'를 시켜버렸다.

혹시나 해서 말하면 (char)(index + 65)하면 최빈값의 index에 65를 더해서 아스키코드로 알파벳이 나오게 해뒀다.

 

자바 어려워... 브론즈 난이도 문젠데도 자바로 하려니까 헤메더라ㅎ

 아 혹시 최빈값 중복 확인하는거 for문아니라 다른 방법있으면 알려주심 감사하겠슴다. 내장 매서드를 잘 몰라스..

 

*********************

// 최빈값 중복 확인

for문 말고 다른 방법으로 해결하는거 찾았다. 입력을 받으면서 조건문으로 바로확인하는 과정을 거친다. 이러한 과정을 통해서 최빈값이 여러개 존재한다면 bool값을 증가시키고 bool값이 0이 아니면 ?를 반환한다. 

import java.util.Scanner;

public class Main {
    public static char Frequence(String str){
        int count[] = new int[27];
        int max = 0, index = 0, bool = 0;
        str = str.toLowerCase();

        for(int i = 0; i < str.length(); i++) {
            count[(int) str.charAt(i) - 97]++;
            if (max < count[(int) str.charAt(i) - 97]) {
                max = count[(int) str.charAt(i) - 97];
                index = (int) str.charAt(i) - 97;
                bool = 0;
            }else if(max == count[(int) str.charAt(i) - 97]) bool++;
        }

        if(bool != 0) return '?';
        return(char)(index+65);
    }

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

        String arr = scan.nextLine();
        System.out.println(Frequence(arr));
    }
}

 

 

 

-꿑-

728x90
반응형