[Java] 백준 10809번: 알파벳 찾기

U·2023년 2월 19일

백준

목록 보기
3/116

💻 문제

업로드중..


일단 이해하자🤔

  • 이전에 풀었던 숫자의 합(11720번) 문제처럼 주어진 단어 S를 split("")을 사용해서 문자열 sChar[]로 저장해준다.
  • 그리고 소문자 알파벳 a부터 z까지 저장되어 있는 문자열 arr[]을 만들어준다.
  • 이중 for문을 이용해서 (if) arr[]sChar[]을 비교해주면서 같으면 arr[]에 그 위치를, (else if) 같지 않으면 arr[]에 -1을 넣어준다. 이때, 문자열 arr[]String형이므로 String.valueOf()를 이용해서 넣어주는 것을 주의한다.
  • 이러한 로직으로 생각했는데 답이 이와 같이 출력된다 ㅠㅠ.. 왜일까?
    => 이렇게 되면 sChar[0] 값인 b가 arr[1]과 같아 첫번째 루프에서는 정상적으로 0이 들어가게 된다. 하지만 sChar[2] 값인 e의 루프를 수행할 때 e와 arr[1]는 같지 않으므로 다시 -1이 들어가게 되는 것이다. 이중 for문 안에 if와 else if를 같이 쓰면 이와 같은 오류가 계속 발생할 것이다.

최종 이해!

  • if문에서 sChar[i] 값과 arr[j] 값이 같을때는 인덱스 값을 대입하고 (String 타입으로) 안의 for문을 빠져나가도록 했다. else문은 사용하지 않았고 대신 출력하는 for문에서 arr[i]의 값이 정수인지 판단하고 정수가 아닐 경우 (sChar[i] 값과 같은 값이 없는 경우) -1을 넣는다. 그러면 완성!

👀 풀이

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 S = bfr.readLine();
        char[] sChar = new char[S.length()];

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

        String arr[] = new String[26];

        for (char ch = 97; ch <= 122; ch++) {
            arr[ch - 97] = String.valueOf(ch);
        }

        for (int i = 0; i < sChar.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (arr[j].equals(String.valueOf(sChar[i]))) {
                    arr[j] = String.valueOf(i);
                    break;
                }
            }
        }


        for (int i = 0; i < arr.length; i++) {
            char ch = arr[i].charAt(0);
            if(48 > ch || ch > 57) {
                arr[i] = String.valueOf("-1");
            }
            bfw.write(arr[i] + " ");
        }

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

💡 결과


아쉬웠던 점••

  • 생각해보면 그리 어렵지 않은 로직 오류였을텐데 시간을 꽤 잡아먹었다. 왜 자꾸 b를 제외한 문자열에 -1이 들어갔는지 몰랐었는데 질문 게시판을 참고하고 나서 알았다. 디버깅 과정을 했는데도 몰랐음에 반성하자 ㅜㅜ
  • 문자열에 들어간 수가 정수인지 판단하는 부분을 서치를 통해 해결했다. 무작정 찾아보기보다는 조금만 더 생각하면 혼자 해결할 수 있었을 조건문이라 아쉽다.
profile
백엔드 개발자 연습생

0개의 댓글