Jakorithm
article thumbnail
728x90

문제

https://www.codetree.ai/training-field/search/problems/alphabet-rotating-sushi?&utm_source=clipboard&utm_medium=text

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

소문자 알파벳 26개가 겹치지 않게 특별한 순서로 26개의 문자로 이루어진 하나의 문자열 A가 주어집니다. 이 문자열 A를 계속 반복하여 내뱉을 때, 듣고 싶은 단어 B를 이루고 있는 문자들을 순서대로 하나씩 듣기 위해 문자열 A를 몇 번 반복하여 적어야 하는지를 구해주는 프로그램을 작성해 보세요.

 

 

코드

첫 번째 줄에 문자열 A가 주어지고, 두 번째 줄에 듣고 싶은 단어 B가 주어진다.

  • 1 <= 단어 B의 길이 <= 1,000

 

substring() 메서드를 통해 비교할 문자열의 부분문자열을 구하는 방법으로 쉽게 문제를 풀 수 있다.

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String a = br.readLine();
        String b = br.readLine();
        
        int count = 1;  // a의 반복 횟수
        String str = a; // 비교할 문자열
        int idx;        // 부분 문자열 인덱스

        for (int i = 0; i < b.length(); i++) {
            // 현재 단어
            String target = String.valueOf(b.charAt(i));

            // 비교할 문자열에 포함되어 있으면 부분문자열 구하기
            if (str.contains(target)) {
                idx = str.indexOf(target) + 1;
                str = str.substring(idx);
            // 없으면 count 증가 후 부분문자열 구하기
            } else {
                idx = a.indexOf(target) + 1;
                str = a.substring(idx);
                count++;
            }
        }

        System.out.println(count);
    }
}
728x90