10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.
만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.
알파벳이 나타남에 따라 문자열 내에서 처음 등장하는 위치(인덱스)를 a b c d e f .. 순으로 표기하는 알고리즘이다.
단어의 길이가 길지 않아 시간적으로는 여유가 될듯 싶다.
일단 순서로 가야하니, 아스키 코드를 활용해야 할듯 싶다. 또한 문제에서 알파벳은 소문자로만 이루어진다 했으므로
소문자 아스키 코드 시작인 97-122까지 활용을 해보자.
일단 우리가 출력해야하는 인덱스는 처음 나온 녀석이다. 예를들어 문자열이 알파벳이 두개이상이면 첫번째로 나온 알파벳에 집중을 해야한다.
1. 알파벳 배열 - alpha[26];
카운팅 정렬할때 처럼 알파벳 a,b,c,d 순으로 인덱싱을 매기기 쉬운 배열을 활용한다. 여기서 문자열을 돌 동안 문자가 나올 경우 그 순서(인덱스)를 배열에 넣을 것이다.
2. 배열의 초기화 값.
문자열을 돌다가 문자가 나와서 그 순서를 알파벳 배열에 넣었을때, 또 다른 중복된 알파벳이 다음 문자에 있다면 이 인덱스는 무시해야한다. 따라서 배열의 초기값을 뭐 -100같은 100 size짜리 문자열과는 관계없는 숫자로 초기설정을 하고 만약 배열의 값이 -100이라면 이때는 값을 바꿔주고 아니라면(먼저 알파벳이 있어서 값이 바뀌었다면) 무시한다.
코드
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String str = br.readLine();
int[] alpha = new int[26];
for(int i=0; i<alpha.length; i++) {
alpha[i] = -100;
}
//a, 0 b, 1 ... z,25
for(int i=0; i<str.length(); i++) {
char now = str.charAt(i);
int index = now - 97;
if(alpha[index] == -100) {
alpha[index] = i;
}
else {
continue;
}
}
for(int i=0; i<alpha.length; i++) {
if(alpha[i] == -100 ) {
alpha[i] = -1;
}
}
for(int x : alpha) {
System.out.print(x+" ");
}
}
}
아래는 아스키코드에 관한 간략한..ㅎㅎ
아스키 코드는 컴퓨터에서 문자를 나타내기 위해 사용되는 표준 코드 체계입니다. 아스키 코드는 0부터 127까지의 숫자로 이루어져 있으며, 이 숫자들은 특정 문자와 대응됩니다.
알파벳 소문자는 97부터 122까지의 아스키 코드 값을 가지고 있습니다. 예를 들어, 'a'는 97, 'b'는 98, 'c'는 99와 같이 대응됩니다.
알파벳 대문자는 65부터 90까지의 아스키 코드 값을 가지고 있습니다. 예를 들어, 'A'는 65, 'B'는 66, 'C'는 67과 같이 대응됩니다.
'Algorithm_PS' 카테고리의 다른 글
11656. <접미사 배열> (1) | 2024.02.05 |
---|---|
11655. <ROT13> (0) | 2024.02.05 |
1918. <후위 표기식> (1) | 2024.01.29 |
1935. <후위표기식2> (1) | 2024.01.29 |
17299. <오등큰수> (1) | 2024.01.29 |