๐ Algorithm/๐ป ๋ฌธ์ ํ์ด
[๋ฐฑ์ค] 1436. ์ํ๊ฐ๋ ์
Seongpyo Hong
2021. 2. 3. 23:35
๋ฌธ์
ํ์ด
์ฐพ์ ๊ท์น์ ๋ค์๊ณผ ๊ฐ๋ค.
- prefix๋ฅผ 0๋ถํฐ ์์ํด์ ์ ์งํ๊ณ 1์ฌ์ดํด์ด ๋๋๋ฉด prefix๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
- ์ฒ์ 0~5๊น์ง๋ prefix์ 666์ฌ์ด์ ๋ถํ๋ค. ex) 1666, 2666, 11666
- prefix 6์ด ๋์ค๋ฉด ๋ค์์ ๋ง๋ค ์ ์๋ ์กฐํฉ์ ๊ฐ์๊ฐ ๋์ด๋จ
ex) prefix 1 => ๋ค์ 10๊ฐ / prefix 16 ⇒ ๋ค์ 100๊ฐ / prefix 166 ⇒ ๋ค์ ์กฐํฉ 1000๊ฐ - ๊ฒฐ๋ก ์ 1์ฌ์ดํด์ 6 + (10^prefix์ 6์ ๊ฐ์) + 3 ์ ๊ท์น์ ๊ฐ์ง๊ฒ ๋๋ค.
๋ค ํผ๋ค์ ์๊ฐํด๋ณด๋ Input์ด ์์์ 1๋ถํฐ ๋ชจ๋ ์๋ฅผ ๋๋ฉฐ 666์ด ํฌํจ๋ ๊ฒฝ์ฐ ์นด์ดํธ ํ๋ ๋ฐฉ๋ฒ๋ ๊ฐ๋ฅํ ๊ฒ ๊ฐ๋ค.
import java.util.Scanner;
public class Solution {
private static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
int N = sc.nextInt() - 1;
if (N == 0) {
System.out.println("666");
return;
}
int prefix = 0;
int cnt;
while (true) {
cnt = 1;
if (prefix % 10 == 6)
cnt++;
if (prefix % 100 == 66)
cnt++;
int limit = (int) Math.pow(10, cnt) + 9;
if (N / limit == 0)
break;
N -= limit;
prefix++;
}
String body = "";
for (int i = 3; i >= cnt; i--) {
body += "6";
}
StringBuilder sb = new StringBuilder();
if (prefix != 0) {
sb.append(String.valueOf(prefix));
}
if (N < 6) {
sb.append(N + "666");
} else {
int limit = (int) Math.pow(10, cnt) + 6;
if (N < limit) {
sb.append(body + getFormatNum(cnt, N - 6));
} else {
sb.append((N - (int) Math.pow(10, cnt) + 1) + "666");
}
}
System.out.println(sb.toString());
}
private static String getFormatNum(int len, int target) {
StringBuilder sb = new StringBuilder();
sb.append(String.valueOf(target));
for (int i = sb.length(); i < len; i++) {
sb.insert(0, '0');
}
return sb.toString();
}
}