백준 > 알파벳 찾기

jinvicky·2023년 12월 7일
0

Algorithm - Java

목록 보기
11/63
post-thumbnail

알파벳 찾기

주어진 소문자 영어 단어를 보고, 단어에 없는 알파벳은 -1로, 있는 알파벳은 영어 단어 내의 index를 출력하라.

package src.baekjoon;

import java.io.*;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
import java.util.StringTokenizer;

public class Main {

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

        String word = br.readLine();
        int[] alpArr = new int[26];

        for(int i = 0; i < alpArr.length; i++) {
            alpArr[i] = -1;
        }

        for(int i = 0; i < word.length(); i++) {
            int ascCode = ((int)word.charAt(i)) - 97;
            if(alpArr[ascCode] == -1) {
                alpArr[ascCode] = i;
            }
        }

        String result = "";
        for(int i = 0; i < alpArr.length; i++) {
            result += alpArr[i] + " ";
        }

        bw.append(result.trim());
        bw.flush();
        bw.close();
    }
}

결과

정답

풀이

원하는 값을 출력하기 위해서는 2가지를 알아야 한다.
1. 알파벳의 아스키 코드 - 97 (소문자이기 때문에 -97을 한다)
2. 문자 내 index 번호 (단순 i)

ch는 구별을 위해서 임시로 넣었다.

 for(int i = 0; i < word.length(); i++) {
            int ascCode = ((int)word.charAt(i)) - 97;
            int wordIdx = i; // 문자열 단어 내 순서
            char ch = word.charAt(i);

            if(alpArr[ascCode] == -1) {
                alpArr[ascCode] = i;
            }
            System.out.println("i = "+wordIdx +", idx = " + ascCode + ", " + ch);
        }

그럼 결국 아래와 같다.

알파벳 배열[단어의 알파벳 아스키 코드] = 단어내 알파벳 순서 index

+) 같은 숫자가 여러번 나왔을 때 맨 앞 인덱스 번호만 출력할 것이므로 -1이 아닐때 조건을 추가해 준다.

소요 시간

1시간 내

profile
Front-End와 Back-End 경험, 지식을 공유합니다.

0개의 댓글