๐ ํ๋ก๊ทธ๋๋จธ์ค / Level 2 / 124 ๋๋ผ์ ์ซ์
๐ ๋ฌธ์
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐ซ ์ ํ ์ฌํญ
- n์ 50,000,000์ดํ์ ์์ฐ์ ์ ๋๋ค.
๐ ์ ์ถ๋ ฅ ์
| n | result |
| 1 | 1 |
| 2 | 2 |
| 3 | 4 |
| 4 | 11 |
๐ค ํ์ด ๋ฐฉ๋ฒ
1๏ธโฃ ์กฐํฉ
โ ์์ด๋์ด
โก๏ธ ๊ธฐ๋ณธ์ ์ผ๋ก ์ซ์๋ค์ ํํ๊ฐ ์ค๋ณต ์กฐํฉ๊ณผ ๊ฐ์ ํํ๋ผ๊ณ ์๊ฐํ๋ค.
ex) n = 4 โก๏ธ "11" / tmp = 0
โ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ค. / 4 ์ผ ๋ ๋ฌธ์์ด์ ๊ธธ์ด : 2
โก ๊ทธ ์ ํํ๋ค์ ๊ฐ์ ๊ตฌํ๋ค. / "1", "2", "4" โก๏ธ 3 ๊ฐ (tmp = 3)
โข ๊น์ด๊ฐ 4 ์ธ ํํ๋ค์ ์กฐํฉ๋ค์ ํ์ธํ๋ฉด์ tmp ๊ฐ๊ณผ n ์ด ๊ฐ์์ง ๋๊น์ง ๋ฐ๋ณตํ๋ค.
โก ์ฝ๋
class Solution {
public static int depth = 1;
public static int tmp = 0;
public static String answer = "";
public static boolean stop = false;
public static String[] str;
public static String[] nums = {"1", "2", "4"};
public String solution(int n) {
// ๋ฌธ์์ด์ ๊ธธ์ด ํ์ธ
int cnt = 3;
while (n > cnt) {
cnt += Math.pow(3, ++depth);
}
// ๋ฐฐ์ด ์์ฑ
str = new String[depth];
// ๊ทธ ์ ๊น์ง์ ์กฐํฉ์ ๊ฐ์
for (int i=1; i<depth; i++) {
tmp += Math.pow(3, i);
}
// ์กฐํฉ ํ์ธ & ๊ฒฐ๊ณผ ์ถ๋ ฅ
comb(n, 0);
return answer;
}
public static void comb(int n, int d) {
if (d == depth) {
tmp++;
if (n == tmp) { // ๋ด๊ฐ ์ฐพ๋ ์์๋ฉด ๋ฌธ์์ด ์์ฑ ํ ๋ฐํ
for (String st : str) {
answer += st;
}
stop = true;
}
return;
}
for (int i=0; i<3; i++) {
str[d] = nums[i];
// ์ฐพ์์ผ๋ฉด ๋ ํ์ํ ํ์๊ฐ ์์ผ๋ฏ๋ก ๋ฐ๋ก ์ข
๋ฃ
if (stop) return;
comb(n, d+1);
}
}
}
โข ๊ฒฐ๊ณผ


โก๏ธ ์๋ฌด๋๋ ์ ๋ ฅ๊ฐ n ์ด ์ปค์ง ์๋ก ์ฌ๊ท๋ ๋ง์์ง๋ฉด์ ์๊ฐ ์ด๊ณผ๋ก ์คํจํ๊ฒ๋๋ ๊ฒ ๊ฐ์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ์ผ๋จ ์กฐํฉ (์ฌ๊ท) ๋ฅผ ํฌ๊ธฐํด์ผํ๋ค.
2๏ธโฃ ๊ท์น ์ฐพ๊ธฐ
โก๏ธ ์ฌ๊ท๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ๊ฒฐ๊ตญ์๋ ์ํ์ ์ผ๋ก ๊ท์น์ ์ฐพ์๋ด๋ ๋ฐฉ์์ด๋ผ๊ณ ์๊ฐํ๋ค. ์ผ๋จ ์๋์ ๊ฐ์ ์ ๊ทผ์ ํด๋ณด์๋ค.
โ 3์ง๋ฒ์ 0, 1, 2 ๋ก ์ซ์ 0 ๋ถํฐ ํํํ๋ค.
โก ํ์ฌ ๋ฌธ์ ๋ 1, 2, 4 ๋ก 1 ๋ถํฐ ํํํ๋ค.
โก๏ธ 3์ง๋ฒ์ ์ ์ฉ์ํฌ๋ ค๋ฉด ๊ตฌํ๋ ค๋ ์ n ์์ 1์ ๋นผ์ 0๋ถํฐ ์์ํ ํ ์๋ฅผ ๋ณํํด์ผํ๋ค. (0 โก๏ธ 1, 1 โก๏ธ 2, 2 โก๏ธ 4)
์ค์ ๋ก ์ ํ์ด๋ฅผ ์ ์ฉ์์ผฐ์ ๋ 1๋ถํฐ 9๊น์ง๋ ์ ๊ตฌํด์ก๋ค. ํ์ง๋ง 10๋ถํฐ๋ ํด๋น ํ์ด๊ฐ ์ ์ฉ๋์ง ์์๋ค. ์ด์ ๋ฅผ ์๊ฐํด๋ณด๋ 124 ๋๋ผ์ ๋ฒ์น์ผ๋ก๋ 3์๋ฆฌ๋ก ๋์ด๊ฐ์ ๋ ์ฒซ์๋ฆฌ์ ๋ชจ๋ ์๋ฅผ ๋ฐฐ์นํ ์ ์์ง๋ง 3์ง๋ฒ์์๋ 0 ์ ์ ์ธํ 1, 2 ๋ง ๋ฐฐ์น ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์๋ฒฝํ ๋ณํ์ด ์ด๋ ค์ด ๊ฑฐ์๋ค. ์ด ๋๋ถํฐ ๋ด๊ฐ ํ ์ ์๋ ์ํ์ ๊ท์น ์ฐพ๊ธฐ๋ ๋๋ฌ๋ค๊ณ ์๊ฐํ๊ณ ๊ทธ๋ฅ ์ง๋ฌธํ๊ธฐ๋ฅผ ํตํด ํจ์จ์ฑ ํ ์คํธ๋ฅผ ํต๊ณผํ ์ฝ๋๋ฅผ ํ์ธํด๋ณด์๋ค.
๐ <์ง๋ฌธํ๊ธฐ>๋ฅผ ํตํด ํ์ธํ ๊ท์น
โ ๊ตฌํ๋ ค๋ ์ n ์ 3์ผ๋ก ๋๋๋ค.
โก ๋๋จธ์ง๋ฅผ ํ์ธํ๋ค
โก-(1) ๋๋จธ์ง๊ฐ 0์ธ ๊ฒฝ์ฐ โก๏ธ ๋ชซ์ -1 / ๋๋จธ์ง๋ 4๋ก ํด์ค๋ค.
โก-(2) ๋๋จธ์ง๊ฐ 0์ด ์๋ ๊ฒฝ์ฐ โก๏ธ โข ์ผ๋ก ๋์ด๊ฐ๋ค.
โข ๋๋จธ์ง๋ฅผ StringBuilder ์ append ํ๋ค. / sb.append(๋๋จธ์ง or 4);
โฃ ๊ฑฐ๊พธ๋ก ์ถ๋ ฅ๋์ด์ผํ๋ฏ๋ก reverse๋ฅผ ์ ์ฉํ๋ค. / sb.reverse();
โค ๋ง์ง๋ง ๋ชซ์ด 0์ด ์๋๋ฉด ๋งจ ์์ ๋ถ์ฌ์ค๋ค. / sb.insert(0, ๋ชซ);
โฅ ๋ฌธ์์ด๋ก ๋ณํํ์ฌ ๋ฐํํ๋ค. / return sb.toString();
โก ์ฝ๋
import java.util.List;
class Solution {
public String solution(int n) {
StringBuffer sb = new StringBuffer();
// โ
while(n >= 3) {
int q = n / 3;
int r = n % 3;
// โก
if(r == 0) {
q = q-1;
r = 4;
}
n = q;
// โข
sb.append(r);
}
// โฃ
sb.reverse();
// โค
if (n != 0) {
sb.insert(0, n);
}
// โฅ
return sb.toString();
}
}
โข ๊ฒฐ๊ณผ

โก๏ธ ํ ์คํธ ์ผ์ด์ค์ ํจ์จ์ฑ ํ ์คํธ ๋ชจ๋ ์งง์ ์๊ฐ ์์ ํต๊ณผํ์๋ค. ํ์ง๋ง ์ด๊ฒ ์ฝ๋ฉ ๋ฌธ์ ์ธ์ง ์ํ ๋ฌธ์ ์ธ์ง ๋ชจ๋ฅด๊ฒ ๋ค...
๐ป ํ์ด ์ฝ๋
[level 2] Title: 124 ๋๋ผ์ ์ซ์, Time: 0.16 ms, Memory: 52.8 MB -BaekjoonHub · Young998904/Practice_Algorithm_Auto@d3fb45
Show file tree Showing 2 changed files with 221 additions and 0 deletions.
github.com