주어진 소문자 영어 단어를 보고, 단어에 없는 알파벳은 -1로, 있는 알파벳은 영어 단어 내의 index를 출력하라.
package src.baekjoon;
import java.io.*;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
import java.util.StringTokenizer;
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));
String word = br.readLine();
int[] alpArr = new int[26];
for(int i = 0; i < alpArr.length; i++) {
alpArr[i] = -1;
}
for(int i = 0; i < word.length(); i++) {
int ascCode = ((int)word.charAt(i)) - 97;
if(alpArr[ascCode] == -1) {
alpArr[ascCode] = i;
}
}
String result = "";
for(int i = 0; i < alpArr.length; i++) {
result += alpArr[i] + " ";
}
bw.append(result.trim());
bw.flush();
bw.close();
}
}
정답
원하는 값을 출력하기 위해서는 2가지를 알아야 한다.
1. 알파벳의 아스키 코드 - 97 (소문자이기 때문에 -97을 한다)
2. 문자 내 index 번호 (단순 i)
ch는 구별을 위해서 임시로 넣었다.
for(int i = 0; i < word.length(); i++) {
int ascCode = ((int)word.charAt(i)) - 97;
int wordIdx = i; // 문자열 단어 내 순서
char ch = word.charAt(i);
if(alpArr[ascCode] == -1) {
alpArr[ascCode] = i;
}
System.out.println("i = "+wordIdx +", idx = " + ascCode + ", " + ch);
}
그럼 결국 아래와 같다.
알파벳 배열[단어의 알파벳 아스키 코드] = 단어내 알파벳 순서 index
+) 같은 숫자가 여러번 나왔을 때 맨 앞 인덱스 번호만 출력할 것이므로 -1이 아닐때 조건을 추가해 준다.
1시간 내