# 문제
- 주소: https://www.acmicpc.net/problem/10809
- 내용: 입력 받은 단어 알파벳 순서를 구하여 a - z 까지 해당 알파벳의 순서를 적용시키고 나머지는 -1로 출력.
# 코드
▼ 코드1 - ArrayList 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String S = br.readLine(); // 입력받은 단어 한 글자씩 저장
ArrayList<String> az = new ArrayList<>();
// a-z 반복
for (char c = 'a'; c <= 'z'; c++) {
// 입력받은 S에 알파벳 있으면 index값 저장. 없으면 -1
int index = S.indexOf(c);
az.add(String.valueOf(index)); // az ArrayList에 저장.
}
for (int i = 0; i < az.size(); i++) {
System.out.print(az.get(i) + " ");
}
br.close();
}
}
▼ 코드2 - int[] 사용
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();
int[] az = new int['z' - 'a' + 1]; // 알파벳 길이
// az에 기본 -1으로 세팅하기
for (int i = 0; i < az.length; i++) {
az[i] = -1;
}
for (int i = 0; i < S.length(); i++) {
char c = S.charAt(i); // S의 i번째 문자를 구해 아스키코드 값 저장
int idx = c - 'a'; // 구한 아스키코드 값에 -'a' (a아스키코드 값)을 해주기
if (az[idx] == -1) { // apple 처럼 중복되는 문자가 있을 수 있어서 -1이면 조건을 추가
az[idx] = i;
}
}
for (int i = 0; i < az.length; i++) { // az 출력
System.out.print(az[i] + " ");
}
br.close();
}
}
# 입/출력 결과
▼ 코드1 - ArrayList 결과
▼ 코드2 - int[] 결과
# 과정
▼ 코드1 - ArrayList 결과
- BufferedReader 클래스를 사용하여 입력값 받기.
- String S에 단어 입력받기.
- ArrayList를 사용, 제너릭은 String을 하여 a-z값을 담을 리스트를 생성.
- for문 사용하여 a-z까지 S.indexOf()에 대입하여 index가 있으면 해당 index를, 없으면 -1이 추가 되도록 az.add(String.valueOf())를 사용.
- for문 사용하여 az에 담긴 값을 print로 공백을 넣어 한 줄로 출력.
- BufferedReader .close() 시키기.
▼ 코드2 - int[] 결과
- BufferedReader 클래스를 사용하여 입력값 받기.
- String S에 단어 입력받기.
- int[] az를 알파벳 개수 만큼 크기 생성.
- for문으로 az 배열 전체에 -1을 기본값으로 설정.
- for문 사용하여 계산.
- : S.length() 만큼 반복
- : char c에 S.charAt()을 사용하여 S에 입력 받은 단어 한 글자씩 담기.
- : int index에 c - 'a'(a의 아스키코드 값)를 빼서 알파벳 몇 번째 순서에 있는지 구하기.
- : if문을 사용하여 az를 순회하면서 -1 같이면 az[index]에 i값 저장하기.
- : 왜냐하면 apple 단어에서 p처럼 중복 알파벳이 있을 수도 있기 때문에.
- for문 사용하여 az 크기 만큼 반복하여 az 요소들 출력.
- br.close(); 해주기.
# 느낀 점
- a-z까지 출력하는 방법을 chat-gpt의 도움을 받았다. 알파벳 개수를 모르는 경우를 대비해서 구할 수 있는 방법이 있는지 chat-gpt가 'z' - 'a' + 1을 하면 된다고 알려주었고, 그에 대한 설명을 읽고 이해했다. 아스키코드 값으록 계산하기 때문에 26이라는 숫자가 나왔다. 그리고 char c에 'a' 값을 담고 반복문으로 c <= 'z'; c++ 을 하면 a부터 z까지의 알파벳을 순회한다는 걸 알게 되었다.
- .charAt() / .indexOf() 를 이해하는데 도움이 됐다.
'코딩 테스트' 카테고리의 다른 글
[코딩테스트] 백준 1152번: 단어의 개수 (0) | 2025.06.15 |
---|---|
[코딩테스트] 백준 2675번: 문자열 반복 (0) | 2025.06.13 |
[코딩테스트] 백준 11720번: 숫자의 합 (0) | 2025.06.11 |
[코딩테스트] 백준 11654번: 아스키 코드 (0) | 2025.06.11 |
[코딩테스트] 백준 9086번: 문자열 (0) | 2025.06.09 |