23-07-24 TIL

more·2023년 7월 24일
0

문제

  • 백준 1515 (수 이어 쓰기) - Java

    • 문제를 풀 때에 생각했던 알고리즘은 숫자를 하나씩 오른쪽으로 옮길 때에 전에 있던 숫자보다 크다면 자릿수를 +1 하고 저장했던 숫자를 새롭게 할당하는 것이였다.
    • 하지만 그렇게 하니 첫번째와 두번째 예제를 제외하고는 통과하지 못하고 에러가 나기 시작했다.
    public class Main {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
            String N = br.readLine();
    
            // 자릿수
            int digit = 0;
            // 숫자
            int num = 0;
    
            for (int i = 0; i < N.length(); i++) {
                // 해당 숫자가 전에 숫자보다 크면 자릿수 + 1
                if (N.charAt(i) - 48 <= num) {
                    digit++;
                    if (i == N.length() - 1) {
                        num = 0;
                        break;
                    }
                }
                // 해당 숫자 저장
                num = N.charAt(i) - 48;
            }
    
            System.out.println(10 * digit + num + "\n");
    
            bw.flush();
            bw.close();
            br.close();
        }
    }
    <초기에 생각했던 코드>

시도

  • 백준 1515 (수 이어 쓰기) - Java
    • 해당 코드에 무슨 문제가 있을까 생각해보다가 잘 안돼서 문제를 다시 읽어보기 시작했다.
    • 그러다가 한 가지 조건이 있는 것을 보았는데 바로 이 "수는 최대 3,000자리다." 라는 조건이었다.
    • 이 조건이 문제인가 싶어서 자릿수를 3000까지 생각해보기로 하였다.
    • 그러면서 숫자를 저장하는것이 아니라 그냥 출력하기로 하였고, 하나씩 올려가면서 살펴보기로 하였다.

해결

  • 백준 1515 (수 이어 쓰기) - Java
    • 숫자가 3000자리면 한자리에 많아봐야 0~9까지 총 10개가 있으므로 num은 30000까지로 생각하였다.
    • 또한 현재 숫자의 i 번째 인덱스하고 입력받은 숫자의 i 번째 인덱스가 같으면 자릿수를 올렸고, 만약 입력 받은 숫자의 length까지 자릿수가 도달하였다면 출력하도록 하였다.

오늘 푼 문제

  • 백준 1515 (수 이어 쓰기) - Java
import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;

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

        String line = br.readLine();

        int digit = 0;

        int num = 0;
        boolean flag = false;
        while (num++ <= 30000) {
            String tmp = String.valueOf(num);
            for (int i = 0; i < tmp.length(); i++) {
                if (tmp.charAt(i) == line.charAt(digit))
                    digit++;
                if (digit == line.length()) {
                    bw.write(num + "\n");
                    flag = true;
                    break;
                }
            }
            if (flag)   break;
        }

        bw.flush();
        bw.close();
        br.close();
    }
}
profile
조금 더

1개의 댓글

comment-user-thumbnail
2023년 7월 24일

많은 도움이 되었습니다, 감사합니다.

답글 달기