▶ 문제
https://www.acmicpc.net/problem/10809
10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
▶ 설명
a~z 범위를 갖는 배열에서 입력받은 문자열의 알파벳 순서를 배열 안에 넣어 출력하는 문제이다.
arr 배열의 값이 입력받은 문자열의 index 번호라는 것만 머리에 잘 그려 놓으면 코드 짜는데 그렇게 어렵지 않을 것이다.
단, 중복되는 단어 'o'는 5번째 'o'만 arr에 반영이 되고 6번째 'o'는 없는 셈 쳐야 한다.
▶ 문제 풀이
🌱 풀이1. charAt( ) 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
// -1로 된 알파벳 갯수26개 배열 생성
int arr[] = new int[26];
for (int i = 0; i < 26; i++) {
arr[i] = -1;
}
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (arr[ch - 'a'] == -1) {
arr[ch - 'a'] = i;
}
}
for (int var : arr) {
System.out.print(var + " ");
}
}
}
arr 배열을 만들 때 -1로 먼저 초기화를 시켜야 한다.
arr[ch - 'a'] = i
그다음, 입력받은 문자열 길이만큼 반복하여서 문자 처음부터 끝까지 charAt(i)으로 i를 arr의 알파벳 순서에 값으로 집어넣도록 한다.
arr[ch]가 아니라 arr[ch-'a']인 이유는 arr의 index는 a~z 순서이기 때문이다. 아스키코드의 10진수에 따라 각 문자에 할당된 번호대로 a~z가 순서대로 위치해 있기에 알파벳에서 'a'를 빼면 몇 번째에 있는 알파벳인지를 알수가 있는 것이다.
if (arr[ch - 'a'] == -1)
중복되는 문자라면 arr에 값으로 들어갈 수 없으므로, -1인 곳에만 값을 넣을 수 있도록 조건을 만들어야 한다.
🌱 풀이2. indexOf( ) 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String s = br.readLine();
for (char c = 'a' ; c <= 'z' ; c++)
sb.append(s.indexOf(c) + " ");
System.out.println(sb);
}
}
indexOf(char c) 메소드는 문자열에서 문자c의 index번호를 반환하도록 한다. 근데 문자열에서 찾는 알파벳이 없다면 -1을 반환하도록 한다.
a에서 z가 될 때까지 반복문을 돌리면서 indexOf()로 결과 값을 반환하기만 하면 되는 간단한 풀이 방법이다.
▶ Log
'백준 알고리즘 > 문자열' 카테고리의 다른 글
[JAVA 자바] 백준 1152번 : 단어의 개수 (0) | 2022.06.05 |
---|---|
[JAVA 자바] 백준 1157번 : 단어 공부 (0) | 2022.06.04 |
[JAVA 자바] 백준 2675번 : 문자열 반복 (0) | 2022.06.03 |
[JAVA 자바] 백준 11720번 : 숫자의 합 (0) | 2022.06.01 |
[JAVA 자바] 백준 11654번 : 아스키코드 (0) | 2022.05.31 |