백준 10809번 알파벳 찾기

조한빈·2020년 10월 3일
0

자바 알고리즘

목록 보기
8/8

주어진 문제

접근 방법

  1. 입력받은 문자열을 split으로 구분하여 String 배열에 저장
  2. 모두 소문자로 입력을 받기때문에 소문자로 변환하는 아스키 코드를 활용
  3. a : 97, b : 98 ~~~ z: 112 이므로 크기가 26(알파벳 수)인 int 배열을 선언
  4. String 배열을 반복문으로 돌리면서 현재 값에서 -97을 하면 알파벳의 순서에 따른 인덱스가 된다.

Ex : b를 alpha 인덱스에 저장하기
1. S라는 String형 배열의 첫번째 값인 "b"를 charAt을 통해 character형으로 변환
2. Integer형인 'b'에 값을 넣으면 아스키 코드값인 정수형인 '98'로 입력된다.
3. 'a'의 아스키 코드값인 97을 빼주면,,
4. 98-97을 하면 '1'이 나오고 alpha라는 배열의 인덱스가 1인 곳은 알파벳 b의 순서에 맞게 두번째 인덱스에 값을 대입할 수 있다.

Ex : z를 alpha 인덱스에 저장하기
1. 'z'또한 아스키 코드로 변환하면 '112'
2. 97(a의 아스키코드값)을 빼주면 25
3. 0부터 25의 인덱스까지 있는 alpha배열의 맨 마지막 인덱스 번호가 된다.
4. 알파벳 상 z의 위치와 같다.

해결 알고리즘

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String[] S = sc.next().split("");
		int[] alpha = new int[26];
		Arrays.fill(alpha, -1);
		for (int i = 0; i < S.length; i++) {
			int b = S[i].charAt(0);
			if (alpha[b - 97] == -1) {
				alpha[b - 97] = i;
			}
		}
		for (int i = 0; i < alpha.length; i++) {
			System.out.print(alpha[i] + " ");
		}
		sc.close();
	}
}

0개의 댓글