[백준/Java] 10809번 알파벳 찾기

2025. 10. 2. 10:06·코테/백준

 

🔗 문제

🔗 깃허브

 

문제

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

입력

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

출력

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.

만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.

예제 입력 1 

baekjoon

예제 출력 1 

1 0 -1 -1 2 -1 -1 -1 -1 4 3 -1 -1 7 5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 

 

 

 

문제 풀이

👉🏻 내 코드

import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		String s = sc.next();
		int[] arr = new int[26]; //알파벳
		
		//모든 값을 -1로 초기화
		for(int i = 0; i < 26; i++) {
			arr[i] = -1; 
		}
		
		for(int i = 0; i< s.length(); i++) {
			char c = s.charAt(i); //i번째 문자
			int idx = c - 'a'; //'a'를 0으로, 'b'를 1로,.... 매핑
			if(arr[idx] == -1) { //처음 등장하는 위치 찾아야 하므로 -1일 때 해당 알파벳 첫 등장 인덱스 저장
				arr[idx] = i;
			}
		}
		
		//알파벳 숫서대로 첫 등장 인덱스 출력
		for(int i = 0; i < 26; i++) {
			System.out.print(arr[i] + " ");
		}
	} 
}

알파벳 개수는 고정이라 고정 크기 배열을 사용.
초기화 값을 -1로 하는데, 만약 0으로 초기화하면 문자열에서 실제로 0번 위치에 등장한 알파벳과 구분이 불가능하다. 그러므로 -1과 같은 불가능한 값을 쓰는 게 안전하다.
a 유니코드 값 97, b는 98, c는 99, ....
그러므로 인덱스 맞추기 위해 int idx = c - 'a';
if (arr[idx] == -1) arr[idx] = i; 첫 등장 위치만 요구하며, 이미 값이 기록됐으면(!= -1) 그보다 뒤에 나오는 같은 알파벳은 무시한다.

 

 

📌 사용된 자료구조

배열 (Array)

int[] arr = new int[26];

알파벳 개수는 변하지 않기 때문에 크기가 고정되므로 배열 사용.

배열의 시간복잡도 : O(1). 상수 시간이므로 바로 접근이 가능하다.

 

 

 

 

 

저작자표시 비영리 변경금지 (새창열림)

'코테 > 백준' 카테고리의 다른 글

[백준/Java] 1157 단어 공부  (0) 2025.10.19
[백준/Java] 2444번 별 찍기-7  (0) 2025.10.11
[백준 / java 11] 5217번 쌍의 합, 7287번 등록  (0) 2025.05.29
[백준 / java 11] 4562번 No Brainer, 4892번 숫자 맞추기 게임  (0) 2025.05.28
[백준 / java 11] 1차원 배열 > 9086번 문자열, 11720번 숫자의 합  (0) 2025.05.22
'코테/백준' 카테고리의 다른 글
  • [백준/Java] 1157 단어 공부
  • [백준/Java] 2444번 별 찍기-7
  • [백준 / java 11] 5217번 쌍의 합, 7287번 등록
  • [백준 / java 11] 4562번 No Brainer, 4892번 숫자 맞추기 게임
amying
amying
공부해보겠슨
  • amying
    꽁꽁 얼어붙은 자바 위를 자박자박
    amying
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (332)
      • 공부 (55)
        • JAVA (17)
        • Spring (17)
        • Java Script (1)
        • React (0)
        • SQL (3)
        • DB (1)
        • CS (13)
        • 기술면접 (3)
      • Git (2)
      • 강의 (36)
        • 부스트코스: Connect On: 테크와 나를 잇.. (16)
        • 부스트코스: CS50 (20)
      • 네이버 부스트캠프 베이직 (25. 06) (0)
      • 에러 (10)
      • 코테 (205)
        • 백준 (29)
        • 프로그래머스 JAVA Lv.0 (116)
        • 프로그래머스 JAVA Lv.1 (7)
        • 프로그래머스 SQL (53)
      • 개인 프로젝트 (16)
        • 책첵 CHAEKCHECK (2)
        • 일정 관리 서비스 만들기 (0)
        • 게시판 만들기 (eclipse-JSP) (14)
      • 이것저것 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    CS50
    업무자동화
    오라클에러
    에러
    lombok
    springbot
    부스트코스
    코테
    부스트코스강의
    git명령어
    코딩테스트_입문
    데이터연동
    ORACLE에러
    책첵개발일지
    Java
    알고리즘
    프로그래머스
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
amying
[백준/Java] 10809번 알파벳 찾기
상단으로

티스토리툴바