문제
입력된 단어에 알파뱃이 있는지 확인하고, 있을시에는 알파뱃의 위치를, 없을 때는 -1을 입력하는 간단한 문제이다.
내 풀이
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 sb = new StringBuilder();
String str = br.readLine();
String[] arr = new String[26];
for(int i=0; i<arr.length; i++){
arr[i] = String.valueOf((char)('a' + i));
}
for(int i=0; i<arr.length; i++){
if(str.contains(arr[i])){
sb.append(str.indexOf(arr[i])).append(" ");
}else{
sb.append("-1").append(" ");
}
}
System.out.println(sb);
br.close();
}
}
알파뱃 문자열 배열을 생성해주고, contains 함수를 사용해서 문자열에 알파뱃이 있는지 확인했다.
의외로 알파뱃 배열을 초기화 할때, 이상한 문자가 나와서 당황스러웠던 것 같다.
그동안 int to char, char to String 등 형변환을 사용할 일이 없어서 혼동되었다. 까먹지않게 연습해야겠다.
풀이 결과
결과는 맞았지만, 다른 사람의 코드와 비교하였을 때 성능이 떨어졌다.
1등의 풀이
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String str = br.readLine();
int[] alphabet = new int[26];
Arrays.fill(alphabet, -1);
/*
문자열을 인덱스 0부터 검사:
1. 검사하면서 인덱스 값을 배열에 저장
2. 만약 값이 -1이 아니라면 스킵
*참고: 소문자 a의 아스키 코드: 97
*/
for (int i = 0; i < str.length(); i++) {
int index = str.charAt(i) - 97;
if (alphabet[index] == -1) {
alphabet[index] = i;
}
}
for (int i = 0; i < alphabet.length; i++) {
sb.append(alphabet[i]).append(" ");
}
System.out.print(sb);
}
}
성능이 뛰어난 코드들을 보니, 먼저 배열을 -1로 초기화하고 입력된 문자열 만큼만 반복했다.
문자열의 위치를 내장함수를 사용하지 않고, 알파뱃의 index 값을 계산해서 사용했다.
알파뱃의 아스키코드를 이용해서 알파뱃의 위치를 구하고, 값을 입력된 문자열의 위치 값을 넣어주었다.
이런 방식은 전혀 생각하지 못했는데, 기발한 방법인 것 같다.
'코딩 테스트 문제 풀이 > 백준' 카테고리의 다른 글
백준 - 구간 합 구하기 5 (11660) (1) | 2025.03.27 |
---|---|
백준 - 구간 합 구하기 4 (11659) (1) | 2025.03.26 |
백준 - 1차원 배열 10810 (0) | 2023.05.12 |
백준 - 입출력과 사칙연산 2257 (0) | 2023.04.27 |