10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
[해설]
이 문제의 경우는 핵심을 잘 짚어야 합니다.
일단 배열안에 26개의 공간을 만들어 -1을 다 채워놓은 상태에서
시작해야 하며 조금 머리를 써야 풀 수 있는 문제 입니다.
이 문제의 경우 아스키 코드를 알아야 하는데
a의 아스키 코드는 97입니다.
즉 b의 아스키 코드는 98이고 a의 아스키 코드는 97입니다.
그러면 'b' - 'a'를 한다면 값이 1이 나오겠죠.
하지만 여기서 주의 해야할 것이 index[0]이 1이니까
b의 값을 array[0]에 집어 넣어야지 라고 하면
문제가 꼬여서 풀 수 없습니다.
이 경우에는 반대로 생각해야 합니다.
b - a로 뺀 값 1을
값으로 집어넣는게 아닌 배열 인덱스에 집어넣어야 합니다.
한번 코드로 보도록 하죠
package com.algorithm;
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int[] array = new int[26];
String name = sc.next(); // backjoon 이름 입력받음
for(int j=0; j<array.length;j++){
array[j] = -1; // 배열의 -1을 채운다.
}
for(int i=0; i<name.length();i++){
char result = name.charAt(i); // 0번 일 경우 b를 가져온다 . b = 98
if(array[result-'a']== -1){ // array[result-'a'] = array[1] == -1이냐 묻는 것.
array[result-'a'] = i; //array[1] = 0을 넣는다.
//result = a 일 경우 a = 97이된다.
// 97 - 97 = 0 임으로 array[0] = 1을 넣게 되면 1 0 -1 -1 ...로 쭉 이어진다.
}
}
for(Integer i : array){
System.out.print(i+" ");
}
}
}
1번의 경우 그냥 단순히 26개 공간에 있는 배열에 -1를 넣습니다.
그 후 charAt() 메서드를 통해 문자열 값 하나를 뽑아오게 됩니다.
그렇게 되면 result = b 가 담기게 되겠죠
b는 아스키코드로 98이고 a는 아스키코드로 97이 됩니다.
여기서 잘 봐야할 것이
if문으로 조건을 걸어줘야 합니다.
배열안에 값들이 -1일 때만 backjoon의 문자열 값들을 넣어줘야 하며
만약 -1을 설정하지 않는다면 들어간 배열이 겹쳐서 답이 다르게 나오게 됩니다.
그 후 array[1] = 0 을 넣어주게 됩니다.
그렇게 되면 배열 1번째 자리에 0이 들어가게 됩니다.
백준의 출력 결과를 보게 되면 1번째 인덱스에 0이 들어간걸 확인 할 수 있습니다.
그 후 다시 for문을 돌려 i는 1이 됩니다.
그러면 result의 값은 a = 97이 들어가게 되죠
다시 result를 본다면 a가 들어가게 되고 a는 97입니다.
그렇게 되면 97 - 97 = 0
즉 array[0]번째를 가르키게 됩니다.
그 후 array[0] = i
i는 포문을 한번돌아 1이 됨으로
array[0] = 1이 되게됩니다.
그렇게 된다면 0번째 인덱스는 1이 되고
1번째 인덱스는 1이 들어가게 됩니다.
이렇게 8번이 돌면
if문의 조건으로 -1만이 있는 공간들에만 값들을 할당하게 되며
값들이 하나하나 씩 채워지게 됩니다.
이 문제의 경우는 조금 난이도가 있는 문제라고 생각합니다.
'백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘 - 1152 ] 단어의 개수 -자바[With Java] (0) | 2023.08.04 |
---|---|
[백준 11659번] - 구간 합 구하기4 자바 [With Java] (0) | 2023.08.04 |
[백준 알고리즘] 1546 - 평균 구하기 자바 - [With Java] (0) | 2023.08.03 |
[백준 알고리즘 5597] - 과제 안내신분? 자바 (With Java) (0) | 2023.08.03 |
[백준 알고리즘 ] 문제 번호 : 10807 [With Java 자바] (0) | 2023.08.01 |