
0부터 돌아가면서 숫자를 세는데, 이진수로 바꿨을 때 앞자리 부터 끊어 말해야 한다. 참가자 수 n과 진수의 차례 k가 주어졌을 때 말해야 하는 숫자 5개를 구하는 문제이다.
자바 문법의 Integer.toBinaryString() 을 이용하면 수월하게 풀리는 문제였다.
n이 최대 100이기 때문에 0부터 차례대로 이진수로 바꿔 StringBuilder에 붙인다.
자신의 차례는 n개씩 더해지는 것을 이용하여 5개를 차례로 출력한다.
Integer.toBinaryString()이 log(n)의 시간이 걸리고 100번을 반복한 정도의 시간이 최종 시간 복잡도이다.
해결언어 : Java
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int n, k;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
StringBuilder sb = new StringBuilder();
for (int i = 0; i <= 100; i++) {
sb.append(Integer.toBinaryString(i));
}
for (int i = 0; i < 5; i++) {
int idx = k - 1 + i * n;
System.out.print(sb.charAt(idx) + " ");
}
br.close();
}
}
