백준 - 4와 7

김준영·2025년 4월 15일

백준

목록 보기
17/27
post-thumbnail

문제 링크 ▶︎ 4와 7

문제 파악

굉장히 간단한 문제라 4와 7이 순서대로 숫자 뒤에 추가되는 순서로 쭉 이어지면 된다. 4와 7이 구성되어있고 4 뒤에 4가 붙어서 44, 4 뒤에 7이 붙어서 47, 7 뒤에 4가 붙어서 74, 7 뒤에 7이 붙어 77, 이런식으로 진행하면 한자리는 2개 두자리는 4개 세자리는 8개 네자리는 16개 이런식으로 2의 제곱수로 늘어나게 된다. 이것을 활용하면 된다.

접근 방법

  1. 먼저 스트링빌더를 리턴하는 answer 라는 함수를 만드는데 인자로는 int 값을 받는데 이 int 값은 몇번째 순서에 존재하는 숫자를 찾을거냐의 의미이다.

  2. 재귀적인 함수로 구성하는데 만약 1번째 숫자를 찾는다면 당연히 4일 것이고, 두번째 숫자는 당연히 7일 것이다.

  3. 3이상의 순서의 숫자들은 해당 순서에 -1을 한 후 2로 나눈 값의 숫자에다가 홀수라면 4를 덧붙이고, 짝수라면 7을 덧붙이면 된다.
    그 원리로는 2,4,8,16,32 쭉 써보면 현재 순서의 숫자가 어떤 부모를 가지는지 알수있다.

코드 구현

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int k = Integer.parseInt(st.nextToken());
        StringBuilder ans = answer(k);
        System.out.println(ans);
    }
    public static StringBuilder answer (int step) {
        if (step == 1) {
            return new StringBuilder("4");
        } else if (step == 2) {
            return new StringBuilder("7");
        } else {
            int pre = (step - 1) / 2;
            int even = step % 2;
            if (even == 0) {
                return answer(pre).append("7");
            } else {
                return answer(pre).append("4");
            }
        }
    }
}

profile
junyoun9dev@gmail.com

0개의 댓글