
1. 문제 풀이 아이디어
k
번째 4와 7로 이루어진 수를 찾기 위해 이진수 변환 방식을 사용하여 문제를 해결한다.
2. 나의 정답 코드
using (StreamReader sr = new StreamReader(Console.OpenStandardInput()))
using (StreamWriter sw = new StreamWriter(Console.OpenStandardOutput()))
{
int k = int.Parse(sr.ReadLine());
int len = 1;
int sum = 0;
while (true)
{
if (sum + Math.Pow(2, len) >= k) break;
sum += (int)Math.Pow(2, len);
len++;
}
k -= sum + 1;
string s=Convert.ToString(k, 2).PadLeft(len, '0').Replace('0','4').Replace('1','7');
sw.WriteLine(s);
}
3. 정리
len
을 1부터 시작해 자리수를 증가시키며k
가 속한 자리수를 찾는다.
sum
에 이전 자리수까지의 개수를 누적하여k
에서 제외한다.
k-1
을 이진수로 변환하여len
길이로 맞춘다.
0
을4
,1
을7
로 변환하여 출력한다.
Share article