백준 KOREA 문자열 만들기

KIMYEONGJUN·2025년 11월 6일
0
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫 번째 줄에 문자열 S가 주어진다.
S는 영어 알파벳 대문자 K, O, R, E, A로만 이루어져 있으며, 문자열의 길이는 10 이상 1000 이하이다.

첫 번째 줄에 만들 수 있는 가장 긴 KOREA 문자열의 길이를 출력한다.

내가 이 문제를 보고 생각해본 부분

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));: 사용자로부터 입력을 받기 위해 BufferedReader를 사용한다.
String koreaPattern = "KOREA";: 우리가 찾으려는 "KOREA" 문자열의 기본 패턴을 정의한다.
String S = br.readLine();: 사용자로부터 입력 문자열 S를 읽어온다.
int currentPatternIdx = 0;: koreaPattern 문자열("KOREA")에서 현재 찾아야 할 문자의 인덱스를 나타낸다. 
0은 'K', 1은 'O', 2는 'R', 3은 'E', 4는 'A'를 의미한다. 
처음에는 'K'부터 찾아야 하므로 0으로 초기화된다.
int maxLength = 0;: 만들어진 KOREA 문자열의 길이를 저장하는 변수이다. 
처음에는 아직 아무 문자도 찾지 못했으므로 0으로 초기화된다.
문자열 S 순회 및 패턴 매칭:
for(int i = 0; i < S.length(); i++) { ... }: 입력 문자열 S의 첫 번째 문자부터 마지막 문자까지 하나씩 살펴보는 반복문이다.
char currentChar = S.charAt(i);: 현재 S에서 살펴보고 있는 문자를 currentChar 변수에 저장한다.
char expectedChar = koreaPattern.charAt(currentPatternIdx);: koreaPattern에서 현재 currentPatternIdx에 해당하는 문자가 우리가 S에서 찾아야 할 문자이다.
if(currentChar == expectedChar) { ... }: 만약 S의 현재 문자가 koreaPattern에서 우리가 찾고 있던 문자와 일치한다면, 다음의 동작들을 수행한다.
maxLength++;: 일치하는 문자를 찾았으므로 KOREA 문자열의 길이가 1 증가한다.
currentPatternIdx++;: 다음에는 koreaPattern의 다음 문자를 찾아야 하므로 currentPatternIdx를 1 증가시킨다.
if(currentPatternIdx == koreaPattern.length()) { currentPatternIdx = 0; }: 만약 currentPatternIdx가 koreaPattern의 길이(즉, 5)와 같아지면, 이는 "KOREA" 한 사이클이 완전히 끝났다는 의미이다.
따라서 다시 currentPatternIdx를 0으로 초기화하여 다음 'K'부터 새롭게 찾도록 합니다. 이렇게 하면 "KOREAKOREA..."와 같이 패턴이 반복될 수 있다.
결과 출력:
System.out.println(maxLength);: S의 모든 문자를 순회한 후, maxLength에 저장된 값이 우리가 만들 수 있는 가장 긴 KOREA 문자열의 길이가 되므로 이 값을 출력한다.
br.close(); 더 이상 BufferedReader를 사용하지 않으므로 자원 반환을 위해 닫아준다.

코드로 구현

package baekjoon.baekjoon_30;

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

// 백준 30700번 문제
public class Main1198 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // KOREA 패턴 정의
        String koreaPattern = "KOREA";
        // 입력 문자열 S 읽기
        String S = br.readLine();

        int currentPatternIdx = 0; // koreaPattern에서 현재 찾아야 할 문자의 인덱스 (0:K, 1:O, ...)
        int maxLength = 0;           // 만들 수 있는 KOREA 문자열의 최대 길이

        // 문자열 S의 각 문자를 순회하며 KOREA 패턴과 일치하는지 확인
        for(int i = 0; i < S.length(); i++) {
            char currentChar = S.charAt(i); // S의 현재 문자

            // 현재 찾아야 할 KOREA 패턴의 문자
            char expectedChar = koreaPattern.charAt(currentPatternIdx);

            // S의 현재 문자가 KOREA 패턴에서 찾아야 할 문자와 일치하면
            if(currentChar == expectedChar) {
                maxLength++; // 길이 증가
                currentPatternIdx++; // 다음 패턴 문자로 넘어감
                // koreaPattern의 끝에 도달했으면 다시 처음(K)으로 돌아감
                if(currentPatternIdx == koreaPattern.length()) {
                    currentPatternIdx = 0;
                }
            }
        }

        // 결과 출력
        System.out.println(maxLength);
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글