본문 바로가기

Java

[Java] Baekjoon_P10809 Position of Alphabet

Problem

입력받은 영어 소문자로 이루어진 문자열을 분석한다.

각 알파벳 a, b, c, ... 순으로 각 알파벳이 등장하는 문자열 상의 위치(0, 1, 2, 3, ...)를 출력하는 프로그램.

문자열 상의 위치는 String으로 한 줄로 이루어지고, 공백을 사이에 둔다. 

등장하지 않은 문자의 자리에는 -1이 입력된다. 

 

Idea

1. 각 알파벳 소문자의 아스키코드 값을 이용한다. (a는 97이고 z는 122이다.)

2. 입력받은 String을 charAt을 이용하여 인덱스별 char으로 쪼갠다.

3. 입력받은 char과 아스키코드 값을 '(char)'을 통해 명시적 형 변환한 char과 비교연산을 통해 같다면 해당 인덱스 값을 출력할 String에 저장한다.

4. 출력할 String에 저장하는 방법은 StringBuilder class를 선언하고, append method를 이용하고, 입력되는 것은 int가 아닌 char으로 해야하기 때문에 Character class의 forDigit(a, b)를 사용하여 int a를 b진법의 char으로 바꾸어 입력한다.

 

Code

import java.util.Scanner;


public class baekjoon_P10809 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String S = sc.nextLine();

		StringBuilder sb = new StringBuilder();

		for(int i = 97+0; i < 97+26; i++ ) {
			char ch = (char)i;

			for(int j = 0; j < S.length() ; j++) {
				if(S.charAt(j) == ch) {
					sb.append(Character.forDigit(j, 10));
					break;
				}
				if(j == S.length()-2) {
					int p = 1;
					sb.append('-');
					sb.append(Character.forDigit(p, 10));
					break;
				}
			}
			if(i == 97+26-1)
				break;
			sb.append(' ');
		}
		String str = sb.toString();
		System.out.println(str);
	}
}

 

Result