SHUSTORY

[백준] 10809번 : 알파벳 찾기 본문

코딩테스트/JAVA

[백준] 10809번 : 알파벳 찾기

어서오시우 2024. 2. 6. 19:46
728x90
문제

 

내 풀이
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String S = sc.next();
// alphabetArray[] 배열 : 소문자 a-z 까지의 아스키 코드 값 배열
int alphabetArray[] = new int[26];
int alphabet = 97;
for (int i = 0; i < alphabetArray.length; i++) {
alphabetArray[i] = alphabet++;
}
// alphabetArray2[] 배열 : -1 배열
int alphabetArray2[] = new int[26];
for (int i = 0; i < alphabetArray2.length; i++) {
alphabetArray2[i] = -1;
}

for (int i = 0; i < S.length(); i++) {
// 입력받은 S 문자열의 각 문자의 아스키 코드 값 차례대로 받기
int sAlphabetAscii = S.charAt(i);
// S에서 처음 입력받은 소문자의 아스키 코드 값과 일치하는 alphabetArray 값의 인덱스를 입력받아
// alphabetArray2의 인덱스 값에 일치시켜 해당 S 문자열의 인덱스 값을 넣는다.
for (int k = 0; k < alphabetArray.length; k++) {
if(alphabetArray[k] == sAlphabetAscii){
alphabetArray[k] = S.indexOf(sAlphabetAscii);
alphabetArray2[k] = S.indexOf(sAlphabetAscii);
}
}
}

// 수정된 alphabetArray2[] 배열 출력

for (int i = 0; i < alphabetArray2.length; i++) {
System.out.printf("%d ", alphabetArray2[i]);
}
}
}
  • 40분동안 아 뭐지?? 분명히 이 풀이면 실행이 돼야되는데 ?? 하면서 봤더니 for문에서 k 값을 사용해야 하는데 습관적으로 i를 적는바람에 시간을 왕창 쏟아버리고 말았다..ㅋㅋ.. 어쨌든 ,ㅐ/ 정상적으로 출력되는 것을 보자 풀었다는 뿌듯함에 희열을 느끼고 다른 풀이를 찾아보는데 내 지저분한 풀이에 비해.. 터무니없이 간결하고 좋은 코드가 있기에 오늘도 하나 배워가며 관련 함수들을 기록하고자 한다.
  • Arrays.fill( 배열 변수, 배열 데이터 )
    • for문을 사용하지 않고도 간결하게 배열을 채울 수 있다.
    • Arrays.fill(alphabetArray2 , -1)

 

다른 풀이
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 stb = new StringBuilder();

String str = br.readLine();

for (char c = 'a'; c <= 'z'; c++) {
stb.append(str.indexOf(c) + " ");
}
System.out.println(stb);
}
}
  • str.indexOf (c)
    • 문자열 str에서 문자 'c'가 처음 등장하는 위치(index)를 반환한다.
    • 만약 문자 c가 문자열에 없으면 -1을 반환한다.

'코딩테스트 > JAVA' 카테고리의 다른 글

[ 백준 ] 11720번 : 숫자의 합  (0) 2024.01.30
[ 백준 ] 11654번 : 아스키 코드  (0) 2024.01.29
[ 백준 ] 27866번 : 문자와 문자열  (0) 2024.01.23
[ 백준 ] 3052번 : 나머지  (0) 2024.01.16
[ 백준 ] 2562번 : 최댓값  (1) 2023.12.04