Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Java
- 상속
- exception
- 자료형
- ArrayList
- 개발자
- 코딩
- 바이트 단위 스트림
- 새벽공부
- 변수
- 다형성
- SSR
- node.js
- 배열
- MPA
- 백엔드
- 졸리다
- 인터페이스
- 예외 처리
- 초보개발자
- 코린이
- throws
- 보조 스트림
- 자바
- 문자 단위 스트림
- 인스턴스
- try-catch
- 파이팅
- FileInputStream
- 메서드
Archives
- Today
- Total
SHUSTORY
[백준] 10809번 : 알파벳 찾기 본문
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]);
}
}
}
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);
}
}
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 |