티스토리 뷰

728x90
반응형

문제

 

알파벳 소문자로만 이루어진 단어 S가 주어진다. 

각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 

포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.

 

입력

 

첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

 

출력

 

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

 

풀이

 

알파벳 개수대로 26개의 원소를 가진 리스트를 생성해 -1로 전부 채워두었다.

 

이후 주어진 단어를 char()메서드를 통해 아스키코드로 변환한 후 -97을 해서 소문자 a를 0으로 맞추었다.

 

이후 간단하게 for문을 돌면서 해당 알파벳 인덱스에 해당하는 값이 -1이면 처음 등장했다는 뜻이니까 현재의 인덱스를,

 

그렇지 않다면 이전에 한 번은 등장했다는 뜻이니까 그냥 넘어가도록 했고 등장하지 않는 알파벳은 당연히 -1을 유지한다.

 

이후엔 문제 조건에 맞춰 출력하면 끝.

 

import java.util.*;
import java.util.stream.Collectors;

public class Prob10809 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        List<Integer> result = new ArrayList<>();

        for (int i = 0; i < 26; i++) {
            result.add(-1);
        }

        List<Integer> ch = sc.nextLine().chars()
                .map(a -> a - 97)
                .boxed()
                .collect(Collectors.toList());

        for (int i = 0; i < ch.size(); i++) {
            if (result.get(ch.get(i)) == -1) result.set(ch.get(i), i);
            else continue;
        }

        for (int i = 0; i < 26; i++) {
            System.out.print(result.get(i) + " ");
        }
    }
}
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함