Notice
Recent Posts
Recent Comments
Link
개발자는 기록이 답이다
[백준/BOJ][Java][10809] 알파벳 찾기 본문
2023.08.21 - [Java] - Java, String의 constant pool과 Heap의 차이
https://www.acmicpc.net/problem/10809
문제 : 입력받은 문자열의 각 인덱스 값을 알파벳에 해당하는 위치에 넣어준다.
내가 푼 풀이
알파벳 수만큼 배열을 만들어서 전부 -1로 세팅한 뒤, a + i 와 일치하는 아스키코드 알파벳일 경우, 해당 문자열의 인덱스값을 대입해준다.
// 'a' + int => int
System.out.println('a' + i ); // --> 97
// str.charAt(j) => char
System.out.println("str.charAt(j) = " + str.charAt(j)); // --> a
// int랑 char의 값 비교
'a' + i == str.charAt(j) // --> true
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));
String str = br.readLine();
int[] count = new int[26];
for (int i = 0; i < 26; i++) {
count[i] = -1;
for (int j = 0; j < str.length(); j++) {
if ('a' + i == str.charAt(j)) {
int targetIdx = str.indexOf(str.charAt(j));
count[i] = targetIdx;
}
}
}
StringBuilder ans = new StringBuilder();
for (int target : count) {
ans.append(String.valueOf(target) + " ");
}
System.out.println(ans);
}
}
메모리 | 시간 | 언어 | 코드 길이 |
11528KB | 76ms | Java8 | 836B |
다른 사람 풀이 1
- 입력 문자열을 toCharArray()함수를 통해 캐릭터 배열로 바꾼 뒤 for문을 도는 방식이다.
- 이미 -1로 세팅하고 나서 조건에 맞을 경우 입력 문자열의 인덱스 대입한다.
- 캐릭터 배열의 인덱스 값에서 -97('a')한 값을 loc변수에 저장한뒤, 알바펫 배열의 인덱스로 사용한다.
// 입력받은 문자열의 첫번째 인덱스 알파벳이 뭔지 확인
System.out.println("arr[i] = " + arr[i]); // -> b
// b - 97 = 1
// num 알파벳 배열에서 b의 위치는 1
System.out.println(arr[i] - 97); // -> 1
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char arr[] = br.readLine().toCharArray();
int num[] = new int[26];
for (int i = 0; i < 26; i++) {
num[i] = -1;
}
for (int i = 0; i < arr.length; i++) {
int loc = arr[i] - 97;
if (num[loc] == -1) {
num[loc] = i;
//System.out.println(arr[i] + " = "+loc);
}
}
for (int i = 0; i < 26; i++) {
System.out.print(num[i] + " ");
}
}
}
메모리 | 시간 | 언어 | 코드 길이 |
12892KB | 68ms | Java8 | 686B |
다른 사람 풀이 2
새로운 알파벳 배열에 담은걸 For문으로 문자열을 출력하는게 아니라, character[]로 담은 입력 문자열이 알파벳 a부터 z까지 일치하는 경우 print로 줄바꿈없이 바로 출력되게 하는 방식이다. 첫 번째 조건문은 이해가 되는데, 두 번째 조건문은 잘 이해가 안간다..
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
char[] S;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
S = br.readLine().toCharArray();
for (int i = 'a'; i <= 'z'; i++) {
for (int j = 0; j < S.length; j++) {
if (S[j] == i) {
System.out.print(j + " ");
break;
}
if (j == S.length - 1) {
System.out.print(-1 + " ");
}
}
}
}
}
메모리 | 시간 | 언어 | 코드 길이 |
12912KB | 68ms | Java8 | 621B |
응용풀이
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));
char[] charArray = br.readLine().toCharArray();
int[] count = new int[26];
for (int i = 0; i < 26; i++) {
count[i] = -1;
for (int j = 0; j < charArray.length; j++) {
if ('a' + i == charArray[j]) {
// 분기처리를 안하면 처음 등장하는 위치가 아닌 마지막 위치가 저장된다
if (count[i] != -1)
break;
else
count[i] = j;
}
}
}
for (int target : count) {
System.out.print(String.valueOf(target) + " ");
}
}
}
메모리 | 시간 | 언어 | 코드 길이 |
11552KB | 76ms | Java8 | 815B |
'알고리즘 > 백준' 카테고리의 다른 글
[백준/BOJ][Java][2675] 문자열 반복 (0) | 2023.08.24 |
---|---|
[백준/BOJ][Java][2908] 상수 (0) | 2023.08.24 |
[백준/BOJ][Java][9086]문자열 (0) | 2023.08.24 |
[백준/BOJ][Java][13223] 소금 폭탄 (0) | 2023.08.24 |
[백준/BOJ][Java][1543] 문서 검색 (0) | 2023.08.23 |