๐ ๋ฌธ์
๐ก ์๊ฐ์ ํ๋ฆ
1,2,4 3๊ฐ์ ์ซ์๋ง์ผ๋ก ํ ์๋ฆฌ์ฉ ํํ
์ด ์๋ฆฟ์๋ 3^N + 3^N-1 + 3^N-2 .... 3^0 => N+1 ์ ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ๊ฐ๋๋ค.
๊ตฐ ๋ด์์ N๋ฒ์งธ ์ซ์๋ฅผ 3^N * n + 3^N-1 * n ...
N+1 ๋งํผ loop์ ๋๊ณ n์ ์ด์ด๋ถ์ด๋ฉด ๋๋ค๊ณ ์๊ฐํ๋ค.
๋จผ์ , 10์ง์ -> 124๋๋ผ์ ์ซ์๊ฐ ๋ฐ๋ก ์๊ฐ๋์ง ์์ผ๋
124๋๋ผ์ ์ซ์ -> 10์ง์๋ณํ์ ๊ณฑ์น์ด ๋ณด์๋ค.
์๋ฅผ๋ค๋ฉด 10์ง์ '241'
3^2 * 2 + 3^1 * 4 + 3^0 * 1
>[0๋จ๊ณ]
3๋ง๋ค ๋จ์๊ฐ ๋ฐ๋๋ ๊ฑธ๋ก ๋ด์ 3์ง๋ฒ!!!!!?!?!?! ๊ทผ๋ฐ ์ซ์ 0๊ณผ 4๋ฅผ ๋ฐ๋ก ์ฒ๋ฆฌํด์ผ๊ฒ ๋ค?
[1๋จ๊ณ]
124๋๋ผ์ ์ซ์์ ๊ธธ์ด == 3^1 + 3^2 + 3^3 + .... 3์ ์ ๊ณฑ์์ ๋์ ํฉ์ด ๋ ์ปค์ง๋ ๋จ๊ณ์ด๋ค.
์๋ฅผ ๋ค๋ฉด '20'์ด๋ผ๋ 10์ง์๋ 3 + 9 + (27) ์์ 3+9 ๊น์ง์ ํฉ๋ณด๋ค ํฌ๊ณ 27๋ณด๋ค ์์ผ๋ฏ๋ก 3์๋ฆฌ.
[2๋จ๊ณ]
1๋จ๊ณ์์ ๊ตฌํ ๊ธธ์ด๋ฅผ length ๋ผ๊ณ ํ๋ฉด 3^length-1 * N + 3^length-2 * M + ... 3^0 * K
๋ค์ ๊ณฑํด์ง ์ NM...K ๊ฐ ๊ณง 124๋๋ผ์ ์ซ์์ด๋ค.
๐ ์ค์
3์ง๋ฒ 0, 1, 2๋ฅผ {1, 2, 4}๋ก ๋์นํ ๊ฒ์ด ์๋ชป.
ex) 6=> 3^1 * 1 + 3^0 * 3 == 3^1 * 2 (3์ง๋ฒ์ด์ง๋ง * 3์ ํ์ฉ.)>[0๋จ๊ณ]
3๋ง๋ค ๋จ์๊ฐ ๋ฐ๋๋ ๊ฑธ๋ก ๋ด์ 3์ง๋ฒ!!!!!?!?!?! ๊ทผ๋ฐ ์ซ์ 0๊ณผ 4๋ฅผ ๋ฐ๋ก ์ฒ๋ฆฌํด์ผ๊ฒ ๋ค?
[1๋จ๊ณ]
124๋๋ผ์ ์ซ์์ ๊ธธ์ด == 3^1 + 3^2 + 3^3 + .... 3์ ์ ๊ณฑ์์ ๋์ ํฉ์ด ๋ ์ปค์ง๋ ๋จ๊ณ์ด๋ค.
์๋ฅผ ๋ค๋ฉด '20'์ด๋ผ๋ 10์ง์๋ 3 + 9 + (27) ์์ 3+9 ๊น์ง์ ํฉ๋ณด๋ค ํฌ๊ณ 27๋ณด๋ค ์์ผ๋ฏ๋ก 3์๋ฆฌ.
[2๋จ๊ณ]
1๋จ๊ณ์์ ๊ตฌํ ๊ธธ์ด๋ฅผ length ๋ผ๊ณ ํ๋ฉด 3^length-1 * N + 3^length-2 * M + ... 3^0 * K
๋ค์ ๊ณฑํด์ง ์ NM...K ๊ฐ ๊ณง 124๋๋ผ์ ์ซ์์ด๋ค.
๐ํ์ด
import java.util.ArrayList;
import java.util.Arrays;
class Solution {
static int totalSum = 0, length = 0;
// 3์ง๋ฒ๊ณผ ์ ์ฌํ๋ 0์ด๋ ์ซ์๊ฐ ์กด์ฌํ์ง ์์ผ๋ฏ๋ก ๋ชจ๋ ์๋ฆฌ์๋ง๋ค 1 ์ด์์ ์ซ์๋ฅผ ๋จ๊น
// -> ๊ฒฐ๊ตญ totalSum + 1 ์ ์๋ฆฌ๋ฅผ MSB๋ถํฐ ๋ด๋ ค๊ฐ๋ฉด์ ๋งค๋ฒ ๋จ๊ฒจ์ผํจ (ex 1, 4, 12, 39...)
static ArrayList<Integer> positionTotalSum = new ArrayList<Integer>(Arrays.asList(0, 1));
// 1๋จ๊ณ 124๋๋ผ ์ซ์ ๊ธธ์ด ๊ตฌํ๊ธฐ, length ์ 124๋๋ผ ์ซ์ ๊ธธ์ด๊ฐ ์ด๊ธฐํ๋จ.
static void getNumberOfDigit(int number) {
do {
totalSum += Math.pow(3, ++length);
positionTotalSum.add(totalSum + 1);
} while (number > totalSum);
}
public String solution(int n) {
// ์๋ฆฟ์ ๊ฒฐ์ -> length ๊ตฌํด์ง
getNumberOfDigit(n);
var stringBuilder = new StringBuilder();
// 2๋จ๊ณ MSB ๋ถํฐ ๊ตฌํ๊ธฐ
for (int m = length - 1; m >= 0 ; m--) {
var powerOfThree = (int) Math.pow(3, m);
int quotient = (int) (n / powerOfThree);
int remainder = (int) (n % powerOfThree);
// ๋จ์ ์๋ฆฌ์์ 1์ด ์ฌ ์ ์๋์ง ๊ฒ์ฌ
if (remainder >= positionTotalSum.get(m)) {
n = remainder;
} else {
quotient--;
n = remainder + powerOfThree;
}
if ((quotient == 3)) stringBuilder.append(4);
else stringBuilder.append(quotient);
}
return stringBuilder.toString();
}
}
'Algorithm > Algorithm (๋ฌธ์ ํ์ด)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] ๊ฐ์ฅ ํฐ ์ (0) | 2021.01.11 |
---|---|
[Programmers] N๊ฐ์ ์ต์๊ณต๋ฐฐ์ (0) | 2021.01.11 |
[Programmers] ์์ฅ (0) | 2021.01.02 |
[Programmers] ์คํ์ฑํ ๋ฐฉ (0) | 2020.12.31 |
[Programmers] ์์ฃผํ์ง ๋ชปํ ์ ์ (0) | 2020.10.31 |