알파벳 소문자로만 이루어진 단어 S가 있다
각각 알파벳에 대해서, 단어에 포함되는 경우에는 처음 등장하는 위치, 포함되어 있지 않은 경우에는 -1을 출력
a
~z
)으로만 이루어져 있다-1
을 숫자가 아닌 해당 알파벳이 아직 한 번도 안나왔다 라는 상태정보 활용배열 초기화
항상 26번만 실행되므로 상수 시간 복잡도 -> O(1)문자열 순회
S의 문자열 길이만큼 순회하기 때문에 -> O(N)배열 출력
arr의 배열길이 만큼 26번 돌기 때문에 -> O(1)전체 시간 복잡도는 모두 더한 값이지만
💡 빅오 표기법에서는 가장 큰 영향을 미치는 최고차항만 남기고 상수와 계수는 무시
따라서 O(N)
import java.io.*;
public class No_10809 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String S = br.readLine();
int[] arr = new int[26];
// 1. 배열의 모든 값 -1로 초기화
for(int i = 0; i < arr.length; i++) {
arr[i] = -1;
}
// 2. 문자열 길이 만큼 반복
for(int i = 0; i < S.length(); i++) {
char ch = S.charAt(i);
if (arr[ch - 'a'] == -1) {
// 같은 알파벳이 반복 등장하여도 조건문이 false가 되므로, 값은 갱신 불가
arr[ch - 'a'] = i;
}
}
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}