[백준 String] 10809번 문제

Kwon·2023년 11월 11일

백준

목록 보기
11/22

사진 출처 : https://www.acmicpc.net/

백준 10809번 문제

풀이

  • 소문자 위주 a~z 까지 -1로 배열 나열한 후 해당 단어의 한 알파벳이 몇 번째 위치하는지 해결해야 하는 문제
  • ex) daughter => 2 -1 -1 1 7 -1 -1 5 -1 4 -1 -1 -1 -1 -1 -1 -1 8 -1 6 3 -1 -1 -1 -1 -1
  • 중복 단어가 있다면 처음 등장한 알파벳 위치만 적용시킨다.
  • 이번 문제는 중복 단어를 해결해야 할 부분에서 어려움을 많이 겪었던 것 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class String6 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String S = br.readLine();
        int[] num = new int[26];

        for (int i = 0; i < num.length; i++) {
            num[i] = -1;
        }

        for (int i = 0; i < S.length(); i++) {
            char ch = S.charAt(i);

            if (num[ch - 'a'] == -1) num[ch - 'a'] = i;
        }
        for (int var : num) {
            System.out.print(var + " ");
        }
    }
}

1. 배열 설정

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String S = br.readLine();
int[] num = new int[26];
for (int i = 0; i < num.length; i++) {
    num[i] = -1;
}

S에 원하는 단어 적은 후, 알파벳 총 개수는 26개로 배열 안에 -1을 26개 삽입

2. 알파벳 자리 찾기

for (int i = 0; i < S.length(); i++) {
    char ch = S.charAt(i);
    if (num[ch - 'a'] == -1) num[ch - 'a'] = i;
}
for (int var : num) {
    System.out.print(var + " ");
}

첫 번째 반복문에서 해당 글자 기준 자리를 찾게 되면 그 자리에 번호를 매김하는 형식으로 해결했다. 예를 들어 S단어 한 글자 씩 떼서 ch에 삽입 후, 검사하려는 첫 번째 글자가 c라면 'c' - 'a' 는 67 - 65 = 2이므로 배열 기준 세 번째 자리에 순서가 매김 된다.

두 번째 반복문에선 총 결과를 출력하는 형식이다.

profile
📲 @bu_kwon_2 / 💻 dnu05043.log / ⌨ Back-end / 🦁 LikeLion

0개의 댓글