본문 바로가기
Algorithm/Baekjoon

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

by unknownomad 2022. 3. 16.

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

 

10809번: 알파벳 찾기

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

www.acmicpc.net



주의점

  • 입력으로 주어지는 문자열 : 알파벳 소문자
  • a ~ z 까지 모두 출력 ➡ 주어진 문자열의 각 문자가 처음으로 나오는 위치 출력
  • 문자 위치 : 0부터 시작(문자열 첫 문자의 위치 = 0)
  • arr 배열의 인덱스(원소 위치)
    ch 가 갖고 있는 문자 인코딩값(=아스키코드값과 동일)에 - 'a' or - 97 해주기
    a: 97 이라는 값에 대응됨(10진수)
  • 문자열을 앞에서부터 검사할 때 사전에 동일 문자가 존재하는 경우
    앞에서 arr 배열의 값을 바꿨을 경우, 이후의 경우에서는 값 변경 X
    = arr 의 원소값이 -1 일 때만 값 변경 = 초기에만 변경

풀이

1. Scanner

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
    
        Scanner in = new Scanner(System.in);
 
        int[] arr = new int[26]; //알파벳 a ~ z 개수
        for(int i = 0; i < arr.length; i++) {
            arr[i] = -1; //arr의 모든 원소값을 -1 로 초기화
        }
        
        String S = in.nextLine();
        for(int i = 0; i < S.length(); i++) {
            char ch = S.charAt(i);
    
            if(arr[ch - 'a'] == -1) { //arr 원소값이 -1 인 경우에만 초기화
                /*
                arr 배열의 인덱스(원소 위치) :
                ch 가 갖고 있는 문자 인코딩값(=아스키코드값과 동일)에 - 'a' or - 97 해주기
                a: 97 이라는 값에 대응됨(10진수)
                */
                arr[ch - 'a'] = i;
            }
        }
        
        for(int val : arr) {
            System.out.print(val + " ");
        }
    }
}

 

2. BufferedReader

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
 
public class Main {
    public static void main(String[] args) {
    
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        int[] arr = new int[26]; //알파벳 a ~ z 개수
        for(int i = 0; i < arr.length; i++) {
            arr[i] = -1; //arr의 모든 원소값을 -1 로 초기화
        }
        
        String S = br.readLine();
        for(int i = 0; i < S.length(); i++) {
            char ch = S.charAt(i);
    
            if(arr[ch - 'a'] == -1) { //arr 원소값이 -1 인 경우에만 초기화
                /*
                arr 배열의 인덱스(원소 위치) :
                ch 가 갖고 있는 문자 인코딩값(=아스키코드값과 동일)에 - 'a' or - 97 해주기
                a: 97 이라는 값에 대응됨(10진수)
                */
                arr[ch - 'a'] = i;
            }
        }
        
        for(int val : arr) {
            System.out.print(val + " ");
        }
    }
}

성능

  • BufferedReader > Scanner

 


출처 : https://st-lab.tistory.com/62

댓글