https://www.acmicpc.net/problem/10809
10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
방법1. 이중포문 시도하던거 -1나오는 곳에서 계속 루프돌아서 실패
indexOf사용해볼까해서
방법2. indexOf() 이용하기
문자열도 증감연산자 먹히는구나
package s07_string;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class MJ_03_10809_3 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String S = br.readLine();
for(int i='a';i<='z';i++) {
System.out.print(S.indexOf(i)+" ");
}
}
}
S.indexOf(검색할문자) 못찾으면-1반환
방법3. 배열, charAt() 이용하기
2번이 코드가 훨씬 간결해서 메모리 적을줄알앗느데 이게 조금 더 적어서 놀람
Arrays.fill( 배열명, 넣을 숫자)
package s07_string;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class MJ_03_10809_2 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] arr = new int [26];//* 먼저 int 형 배열을 하나 생성하여 모두 -1 로 초기화 시킨다
for(int i = 0; i < arr.length; i++) {
arr[i] = -1;
}
String S = br.readLine();
for(int i=0;i<S.length();i++) {
char ch = S.charAt(i);
if(arr[ch-'a']==-1) {
arr[ch-'a']=i;
}
}
for(int val: arr) {
System.out.print(val+" ");
}
}
}
입력받은S를 char형 변수ch에 넣어주는데
ch 의 문자의 위치(인덱스값)를 우리가 앞서 만든 arr 배열의 값으로 바꿔준다.
이때 문제에서 위치(인덱스값)는 0 부터 시작한다고 했으니
ch 의 문자의 위치는 i(0부터시작)가 되는 것을 알 수 있다.
String S = br.readLine();
for(int i=0;i<S.length();i++) {
char ch = S.charAt(i);
이 때 배열 arr의 인덱스값은
ch값=S.charAt(i)값=아스키코드값
에서
'a' 또는 97을 빼주면 된다.
//대문자아스키코드: 65~90 / 소문자아스키코드: 97~122
//소문자a(97)를 입력받으면 arr의 인덱스값 0 에 들어가야하는데 97-x = 0, x=97
//소문자c(97)를 입력받으면 arr의 인덱스값 2에 들어가야하는데 99-x = 2, x=97
//x값 97를 빼주면 arr의 인덱스값을 알 수 있다
동일 문자가 포함되어있는 경우 처음 나타난 위치로 나타내야한다.
문자열을 앞에서부터 검사할 때, 앞선 동일문자가 존재하여 arr 에 위치를 변경했을 경우는 arr 의 값을 변경하지 않으면 된다.
결국 -1 인 경우(초기설정값)에는 배열의 원소 값을 변경하고
-1 이 아닌 경우(바뀐경우=동일문자가있는 경우) 배열의 원소 값을 변경하지 않고 -1로 냅둔다.
if(arr[ch-'a']==-1) {
arr[ch-'a']=i;
}
}
확장 for문을 통해 출력하는데 한줄에 한 원소와 한 공백을 출력해야 하므로 빈공백" " 도 넣어서 출력해준다.
'ONLINE JUDGE > 문자열' 카테고리의 다른 글
[백준1152] 단어의 개수 (0) | 2022.03.11 |
---|---|
[백준1157] 단어 공부 (0) | 2022.03.10 |
[백준2675] 문자열 반복 (0) | 2022.03.09 |
[백준11720] 숫자의 합 (0) | 2022.03.05 |
[백준11654] 아스키 코드 (0) | 2022.03.04 |
댓글