문제 출처 https://www.acmicpc.net/problem/10809
내가 작성한 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
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));
int str[] = new int[26];
for(int i=0; i<26; i++) {
str[i] =-1; //모두 -1으로 초기화
}
String s = br.readLine();
for(int i=0; i<s.length(); i++) {
char ch = s.charAt(i);
int j = ch-97; //숫자로 변환
if(str[j]== -1) { //처음 등장한 위치에만 표시하기 위해
str[j] =i;
}
}
for(int i=0; i<26; i++) {
bw.write(str[i] +" ");
}
bw.flush();
bw.close();
}
}
아스키 코드
접근 방법
- 먼저 26개의 알파벳 개수만큼 배열을 만들고 -1로 초기화 한다.
- b -> 십진수로 표현하면 98이므로 98-97 = 1 str[1]로 표현하면 된다.
- baekjoon은 o이 2개이지만 처음 등장한 위치는 5로 반환해야한다. 그래서 str[]이 -1로 표시되어있는 곳만 새로운 위치의 수로 바꾸게 한다.
ex) baekjoon에서 첫번째 'o'의 위치는 5, str[14]=5로 위치를 바꾼다. 그 후 두번째 'o'는 위치가 6이지만 위치를 바꾸면 안되기 때문에 if문으로 str[j]== -1 일 때만 변경되게 하는 것이다.