[백준] - 단계별로 풀어보기(문자열) 10809

김민경·2022년 4월 12일
0

백준

목록 보기
33/39

백준 10809번

알파벳 찾기

문제 출처 https://www.acmicpc.net/problem/10809


내가 작성한 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int str[] = new int[26];
		for(int i=0; i<26; i++) {
			str[i] =-1; //모두 -1으로 초기화
		}
		String s = br.readLine();
		for(int i=0; i<s.length(); i++) {
			char ch = s.charAt(i);
			int j = ch-97; //숫자로 변환
			
			if(str[j]== -1) { //처음 등장한 위치에만 표시하기 위해 
				str[j] =i;
			}
		}
		for(int i=0; i<26; i++) {
			bw.write(str[i] +" ");
		}
		bw.flush();
		bw.close();
	}
}

아스키 코드

접근 방법

  1. 먼저 26개의 알파벳 개수만큼 배열을 만들고 -1로 초기화 한다.
  2. b -> 십진수로 표현하면 98이므로 98-97 = 1 str[1]로 표현하면 된다.
  3. baekjoon은 o이 2개이지만 처음 등장한 위치는 5로 반환해야한다. 그래서 str[]이 -1로 표시되어있는 곳만 새로운 위치의 수로 바꾸게 한다.
    ex) baekjoon에서 첫번째 'o'의 위치는 5, str[14]=5로 위치를 바꾼다. 그 후 두번째 'o'는 위치가 6이지만 위치를 바꾸면 안되기 때문에 if문으로 str[j]== -1 일 때만 변경되게 하는 것이다.

0개의 댓글

관련 채용 정보