๋ฌธ์
ํ์ด
์ฐพ์ ๊ท์น์ ๋ค์๊ณผ ๊ฐ๋ค.
- 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();
}
}
'๐ Algorithm > ๐ป ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 11053. ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (0) | 2021.02.10 |
---|---|
[๋ฐฑ์ค] 9663. N-Queens (0) | 2021.02.05 |
[๋ฐฑ์ค] 2493. ํ (0) | 2021.02.04 |
[๋ฐฑ์ค] 1018. ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ (0) | 2021.02.02 |
[๋ฐฑ์ค] 2146. ๋ค๋ฆฌ ๋ง๋ค๊ธฐ (1) | 2021.02.02 |
๋๊ธ