1 분 소요

사용 언어: Python3, Java

문제

수 이어 쓰기

풀이

나의 풀이

자바

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));

        String target = in.readLine();
        int ans = 0;
        while (true) {
            ans += 1;
            String tmp = Integer.toString(ans);

            while (tmp.length()>0 && target.length()>0) {
                if (tmp.charAt(0) == target.charAt(0)) {
                    target = target.substring(1); // 시작 인덱스
                }
                tmp = tmp.substring(1); // tmp 첫 글자 제거
            }
            if (target.equals("")) { // 더이상 찾을게 없으면 break
                out.write(Integer.toString(ans)); // out.write(ans); 는 안된다 !!
                break;
            }
        }
        out.close();
        in.close();
    }
}
  • 테스트 케이스: 성공
  • 제출 결과: 성공
  • 참고로 마지막 out.write() 부분에 문자열로 바꾸지 않고 정수를 그대로 집어넣으면 제대로 된 답이 아닌 쓰레기 값이 나온다.
    • BufferedWriterwrite() 메소드는 정수를 입력하는 메소드가 아니기 때문이다.
    • 문자(char)를 int형으로 입력을 받는 거라 쓰레기 값이 뜬다. 

다른 풀이

파이썬

참고

target = input()
ans = 0
while True:
    ans += 1
    tmp = str(ans)
    while len(tmp) > 0 and len(target) > 0:
        if tmp[0] == target[0]:
            target = target[1:] # target의 맨 앞 한글자를 제거한다
        tmp = tmp[1:] # tmp의 맨 앞 한글자를 제거한다
    if target == '': # 더이상 찾을 숫자가 없다면 답은 그때의 ans
        print(ans)
        break

자바

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));

        String target = in.readLine();
        int ans = 1;
        int lp = 0; // target의 각 문자를 가리키는 포인터 (left pointer)
        loop: while (true) {
            String tmp = String.valueOf(ans);
            for (int i=0; i<tmp.length(); i++) {
                if (tmp.charAt(i) == target.charAt(lp)) lp++;
                if (lp == target.length()) break loop; // 더이상 찾을게 없으면 break
            }
            ans++;
        }
        out.write(String.valueOf(ans));
        out.close();
        in.close();
    }
}
  • 테스트 케이스: 성공
  • 제출 결과: 성공
  • break <반복문이름>;로 특정 반복문을 빠져나갈 수 있다.


💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기