[백준] 10809 알파벳 찾기

차누·2024년 2월 23일
0

문제

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

입력

첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

출력

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

처음 문제 접근방식

  1. 알파벳 개수가 담긴 정수형 배열을 -1로 초기화
  2. 문자열을 입력받아 해당 위치의 인덱스 값을 저장
  3. 출력

문제가 해결되는 지 알았지만 2개의 문자가 중복이 됐을땐 처음 인덱스가 저장이 되는게 아니라 마지막 인덱스가 저장이 되었다. 중복을 방지하는 코드를 짜야 했지만 아무리 생각해도 생각이 나지 않았다

처음 시도한 코드

int [] arr_int = new int[26];
		
		//단어의 개수 초기화
		for(int i = 0; i < 26; i++) {
			
			arr_int[i] = -1;
		}
		
		for(int i = 0; i < str.length(); i++) {
			
			arr_int[str.charAt(i) - 'a'] = i;

		}
		
		for(int i : arr_int) {
			
			System.out.print(i + " ");
		}

그래서 다른 분의 코드를 찾아보니 -1일때만 저장을 해줘 중복이 들어온걸 해결 할 수 있었다.

int [] arr_int = new int[26];
		
		//단어의 개수 초기화
		for(int i = 0; i < 26; i++) {
			
			arr_int[i] = -1;
		}
		
		for(int i = 0; i < str.length(); i++) {
			
			if(arr_int[str.charAt(i) - 'a'] == -1) {
				
			arr_int[str.charAt(i) - 'a'] = i;
			
			}
		}
		
		for(int i : arr_int) {
			
			System.out.print(i + " ");
		}

끝까지 혼자 힘으로 해결 할 수 있었지만 마지막까지 생각못한 내가 아쉬웠다. 더 열심히 해야겠다.

profile
to be good programmer

0개의 댓글