문제
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
출력
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.
만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.
예제 입력 1 복사
baekjoon
예제 출력 1 복사
1 0 -1 -1 2 -1 -1 -1 -1 4 3 -1 -1 7 5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
1. 배열 이용해 출력하기
package string;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class main {
public static void main(String[] args)throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
StringBuilder sb = new StringBuilder();
int arr[] = new int[26]; // 출력할 배열
for(int i=0;i<arr.length;i++) { // 배열을 -1로 초기화
arr[i] = -1;
}
for(int i=0;i<s.length();i++) {
if(arr[s.charAt(i)-'a']==-1) { // 각 s의 ch를 arr의 인덱스의 값으로
arr[s.charAt(i)-'a'] = i; // -1이면 중복된 알파벳이 아니므로 i 넣기
}
}
for(int ans:arr) {
sb.append(ans).append(" ");
}
System.out.println(sb);
}
}
2. indexOf 함수 사용하기
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args)throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
StringBuilder sb = new StringBuilder();
for(char ch='a'; ch<='z'; ch++) {
sb.append(s.indexOf(ch)).append(" ");
}
System.out.println(sb);
}
}
- 일단 문제를 보고 알파벳 배열을 만든다음에 문자열 s를 비교한 다음 또 다른 배열을 만들어서 거기에 -1과 문자열 s의 인덱스를 넣으려고 했는데 그러면 for문을 너무 많이 사용해 낭비한다는 생각이 들었다.
- -1이 많이 나오는 것을 보니까 -1로 초기화 하면 될 것을.. 너무 어렵게 생각했다..
- 향상된 for문 배열 출력할 때 짱 좋음..
- 문자열.charAt(i) 하면 각 문자열의 문자(a, b, c, d..)나오고 거기에 -'a' 아니면 - 97 하면 그 문자에 해당하는 숫자 나오는거 명심하기
- indexOf 함수쓰니까 저 길다란 for문 세개를 for문 한 개로 줄일 수 있다.. 외워두기.. !!!!!
'algorithm > Baekjoon' 카테고리의 다른 글
[백준] 1157 단어 공부 (0) | 2022.10.05 |
---|---|
[백준] 2675 문자열 반복 (0) | 2022.10.05 |
[백준] 4673 셀프 넘버 (0) | 2022.09.29 |
[백준] 8958 OX퀴즈 (0) | 2022.09.27 |
[백준] 3052 자바 (0) | 2022.09.26 |