백준 1515번 수 이어 쓰기 Java

: ) YOUNG·2024년 8월 10일
1

알고리즘

목록 보기
393/422
post-thumbnail

백준 1515번 수 이어 쓰기 Java

https://www.acmicpc.net/problem/1515

문제



생각하기


  • 문자열, 완탐 문제이다.


동작

curNum을 1부터 시작해서 완전탐색을 통해N을 최소값으로 해서 가능한 값을 찾는다.

strNumPointerIndex 입력된 값에서 현재 가리키는 숫자의 위치 index를 의미한다.

strNumPointerIndex를 증가시키면서 curNum과 비교하면 된다.



입력값이 1111111 일때 strNumPointerIndex는 1이되고 curNum을 문자열로 만들어

자리수와 비교해서 1과 1이 같기 때문에 strNumPointerIndex를 증가시킨다.

다음은 curNum이 2부터 1이 들어가는 10까지 증가한 후

10에서 strNumPointerIndex가 1이고 해당위치 값이 1로

10의 1과 일치하여 strNumPointerIndex는 증가한다.

그리고 curNum이 11이 되면

strNumPointerIndex이 3일 때 1로 일치하여 strNumPointerIndex++
strNumPointerIndex이 4일 때 1로 일치하여 strNumPointerIndex++

strNumPointerIndex는 5가 된다.

이런식으로 반복하면서 1부터 숫자를 증가시켜 N의 최소값을 찾으면 된다.



결과


코드


import java.io.*;

public class Main {

    // input
    private static BufferedReader br;

    // variables
    private static String str;

    public static void main(String[] args) throws IOException {
        br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        input();

        bw.write(solve());
        bw.close();
    } // End of main()

    private static String solve() {
        StringBuilder sb = new StringBuilder();
        int curNum = 1; // 1부터 시작해서 완탐
        int strNumPointerIndex = 0; // str의 자리수 인덱스
        int strLength = str.length();

        while (strNumPointerIndex < strLength) {
            String curNumStr = Integer.toString(curNum);
            if (curNumStr.indexOf(str.charAt(strNumPointerIndex)) == -1) {
                curNum++;
                continue;
            }

            int curNumStrLen = curNumStr.length();
            for (int i = 0; i < curNumStrLen; i++) {
                if (str.charAt(strNumPointerIndex) == curNumStr.charAt(i)) {
                    // sequenceIndex의 문자값과 curNumStr의 i번째 값이 같을경우 sequenceIndex를 증가
                    strNumPointerIndex++;
                    if (strNumPointerIndex == strLength) {
                        break;
                    }
                }
            }
            curNum++;
        }

        sb.append(curNum - 1);
        return sb.toString();
    } // End of solve()

    private static void input() throws IOException {
        str = br.readLine();
    } // End of input()
} // End of Main class

0개의 댓글