[Java] 백준 1157번: 단어 공부

U·2023년 2월 26일

백준

목록 보기
11/116

💻 문제


일단 이해하자🤔

  • 처음에 생각했던 로직은 알파벳 A부터 Z까지 들어있는 char 배열을 만든 후 입력받은 문자열 str과 하나하나 비교하여 같으면 같은 인덱스의 int 배열에 ++을 하려고 했다.

  • 하지만 이 방법이 복잡한 것 같아 이중 for문을 이용해 ch[i]ch[j]가 같으면 count++을 하고 int 배열 count 값이 가장 큰 알파벳을 반환하려고 했다. 그러나..
    가 뜬 관계로 이중 for문을 사용하지 못했다. 주어지는 단어의 길이 제한이 1,000,000이므로 이중 for문을 돌리면 시간 제한 2초를 초과한다는 것이다.

  • 그래서 처음 생각했던 로직으로 다시 돌아왔다😅

  • 입력받은 문자열을 알파벳 단위로 넣은 char 배열 ch과 대문자 알파벳 A부터 Z까지 들어있는 char 배열 alpa과 비교하여 같을 경우 alpa와 같은 크기의 int 배열 alpaCount의 같은 인덱스에 ++를 해준다.

  • alpaCount에서 가장 큰 값의 인덱스를 구하는 for문에서 max와 같은 값이 있으면 boolean형 same 변수를 true로 바꿔준다. (처음 선언할땐 false로 선언해줘야함!) 마지막 if문에서 sametrue? 출력, 아니라면 가장 많이 나온 알파벳 출력!


👀 풀이

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(System.out));

        String str = bfr.readLine().toUpperCase();

        char ch[] = new char[str.length()];
        char alpa[] = new char[26];
        char aschi = 65;

        int count[] = new int[str.length()];
        int alpaCount[] = new int[26];
        int max = 0;
        int maxIn = 0;
        boolean same = false;

        for (int i = 0; i < ch.length; i++) {
            ch[i] = str.charAt(i);
        }

        for(int i = 0; i < alpa.length; i++) {
            alpa[i] = aschi;
            aschi++;
        }

        for (int i = 0; i < ch.length; i++) {
            for (int j = 0; j < alpa.length; j++) {
                if (ch[i] == alpa[j]) {
                    alpaCount[j]++;
                    break;
                }
            }
        }

        for (int i = 0; i < alpaCount.length; i++) {
            if (max < alpaCount[i]) {
                max = alpaCount[i];
                maxIn = i;
                same = false;
            }
            else if (max == alpaCount[i]) {
                same = true;
            }
        }

        if (same) {
            bfw.write("?");
        } else {
            bfw.write(alpa[maxIn]);
        }

        bfr.close();
        bfw.flush();
        bfw.close();
    }
}

아쉬웠던 점••

  • 단지 예제만을 통과하는게 아니라 문제의 조건(ex. 단어의 길이)까지 잘 고려해야 함을 느꼈다.
profile
백엔드 개발자 연습생

0개의 댓글