[백준] n.10809 - 한 단어에 있는 알파벳의 위치 찾기

SMALL

1. 문제

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

 

10809번: 알파벳 찾기

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출

www.acmicpc.net


2. 주요 개념

- 배열 (String, Character, int)

- split

- 아스키코드 (숫자를 문자로 변환)

- charAt


3. 나의 풀이 (*은 잘 안풀린 부분)

import java.io.*;
import java.util.*;

public class Main {

  public static void main(String[] args) {

    Scanner s = new Scanner(System.in);

    String str = s.nextLine();
    // 단어 입력받기

    String[] split_arr = str.split("");
    // 단어 길이 측정을 위한 배열

    Character[] str_arr = new Character[split_arr.length];
    // ** string > char 형 변환을 위한 배열
    // 단어의 각 알파벳을 저장

    for (int i=0; i<split_arr.length; i++) {
      str_arr[i] = str.charAt(i);
      // System.out.println(str_arr[i]);
    }
    
    Character[] ascii_arr = new Character[26];
    // a~z 저장할 배열
    
    int[] idx_arr = new int[26];
    // a~z 위치 저장 배열

    for (int i=0; i<idx_arr.length; i++) {
      idx_arr[i] = -1; // -1로 전부 초기화
    }
    
    for (int i = 97, j = 0; i <= 122; i++) {
      ascii_arr[j] = (char) i;
      // a~z 저장
      // System.out.println(ascii_arr[j]);
      j++;
    }

    for (int i = 0; i<ascii_arr.length; i++) {
      for (int j = 0; j<str_arr.length; j++) {
        if (ascii_arr[i] == str_arr[j]) {
          if (idx_arr[i] == -1) {
            idx_arr[i] = j; // 알파벳 포함 시, 인덱스 값 저장
          } else {
            continue;
          }
        } else {
          continue; 
        }
      }
      
    }

    for (int i=0; i<idx_arr.length; i++) {
      System.out.print( idx_arr[i] + " ");
    }
    
 }

}


4. 짚고 넘어가기!

- String과 Char은 서로 형변환 X > charAt을 통해 문자열에서 문자를 뽑아 Character 배열에 따로 저장!

- 초기 위치 값을 -1로 설정 > 값이 존재하면 위치값(index 값으로 바뀌도록!)

-  a~z가 들어있는 배열 생성 > 아스키코드(int형, 97~122)를 문자형(char)로 변환! 

728x90