문제 링크 ▶︎ 4와 7
굉장히 간단한 문제라 4와 7이 순서대로 숫자 뒤에 추가되는 순서로 쭉 이어지면 된다. 4와 7이 구성되어있고 4 뒤에 4가 붙어서 44, 4 뒤에 7이 붙어서 47, 7 뒤에 4가 붙어서 74, 7 뒤에 7이 붙어 77, 이런식으로 진행하면 한자리는 2개 두자리는 4개 세자리는 8개 네자리는 16개 이런식으로 2의 제곱수로 늘어나게 된다. 이것을 활용하면 된다.
먼저 스트링빌더를 리턴하는 answer 라는 함수를 만드는데 인자로는 int 값을 받는데 이 int 값은 몇번째 순서에 존재하는 숫자를 찾을거냐의 의미이다.
재귀적인 함수로 구성하는데 만약 1번째 숫자를 찾는다면 당연히 4일 것이고, 두번째 숫자는 당연히 7일 것이다.
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");
}
}
}
}