Slow but steady wins the race

[JAVA] 백준 10809번 : 알파벳 찾기 본문

Programming Language/자료구조와 알고리즘

[JAVA] 백준 10809번 : 알파벳 찾기

BS Kwak 2021. 3. 30. 11:42

1. 문제

알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.

 

2. 전체 코드

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner sc = new Scanner(System.in);
		String S = sc.nextLine();
		byte[] byte_S = S.getBytes(); 

		for(int j=97;j<=122;j++) {
			int cnt=0;
			for(int i=0;i<byte_S.length;i++) {
				if(j==byte_S[i]) {
					if(cnt==0) System.out.print(i+" ");
					cnt++;
				}
			}
			if(cnt==0)	System.out.print("-1 ");
		}
		
		sc.close();
	}

}

 

3. 풀이

byte[] byte_S = S.getBytes(); 

입력받은 문자열 S를 byte배열로 바꿔주는 이유는 해당 문자의 ASCII코드 값을 불러오기 위함이다.

문자열의 각 문자들의 ASCII코드 값을 byte_S 배열에 저장한다. 

 

for(int j=97;j<=122;j++) {
			int cnt=0;
			for(int i=0;i<byte_S.length;i++) {
				if(j==byte_S[i]) {
					if(cnt==0) System.out.print(i+" ");
					cnt++;
				}
			}
			if(cnt==0)	System.out.print("-1 ");
		}

97부터 122는 a부터 z까지의 ASCII 코드값이다. 

 

<안쪽 반복문>

문자열의 길이는 모르므로, byte_S.length (byte_S배열의 길이)만큼 반복문을 돌린다. 아스키 코드값과 byte_S[i]값이 일치하면, cnt를 1씩 증가하도록 한다.

cnt를 1씩 증가시키기 전에 cnt==0이면 출력하게끔 하면, 문자열의 첫번째로 나오는 경우에만 출력된다. 

예를 들면 hello 의 경우, l은 두번 나오지만, 첫번째 l을 만나면 먼저 해당 값을 출력하고, cnt를 1증가 시켜 다음 l을 만났을 경우에는 출력이 되지 않도록 한다. 

 

<바깥 반복문>

cnt의 값이 0인 경우, -1을 출력하도록 한다. (문자열에 포함되지 않는 문자들)

 

4. 링크

www.acmicpc.net/problem/10809

 

10809번: 알파벳 찾기

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출

www.acmicpc.net

 

Comments