Algorithm

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค | 3์ง„๋ฒ• ๋’ค์ง‘๊ธฐ

osean 2020. 12. 17. 18:55

๋ฌธ์ œ

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - 3์ง„๋ฒ• ๋’ค์ง‘๊ธฐ

์ž์—ฐ์ˆ˜ n์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. n์„ 3์ง„๋ฒ• ์ƒ์—์„œ ์•ž๋’ค๋กœ ๋’ค์ง‘์€ ํ›„, ์ด๋ฅผ ๋‹ค์‹œ 10์ง„๋ฒ•์œผ๋กœ ํ‘œํ˜„ํ•œ ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. ์ œํ•œ์‚ฌํ•ญ n์€ 1 ์ด์ƒ 100,000,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜

programmers.co.kr

๋ฌธ์ œ ์„ค๋ช…

์ž์—ฐ์ˆ˜ n์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. n์„ 3์ง„๋ฒ• ์ƒ์—์„œ ์•ž๋’ค๋กœ ๋’ค์ง‘์€ ํ›„, ์ด๋ฅผ ๋‹ค์‹œ 10์ง„๋ฒ•์œผ๋กœ ํ‘œํ˜„ํ•œ ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ

  • n์€ 1 ์ด์ƒ 100,000,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

n result
45 7
125 229

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • ๋‹ต์„ ๋„์ถœํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
n(10์ง„๋ฒ•) n(3์ง„๋ฒ•) ์•ž๋’ค ๋ฐ˜์ „(3์ง„๋ฒ•) 10์ง„๋ฒ•
45 1200 21 7

 

  • ๋”ฐ๋ผ์„œ 7์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • ๋‹ต์„ ๋„์ถœํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
n(10์ง„๋ฒ•) n(3์ง„๋ฒ•) ์•ž๋’ค ๋ฐ˜์ „(3์ง„๋ฒ•) 10์ง„๋ฒ•
125 11122 22111 229

 

  • ๋”ฐ๋ผ์„œ 229๋ฅผ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

ํ’€์ด

์„ค๋ช…

  • ์ง„๋ฒ• ๊ณ„์‚ฐ์„ ์•„์˜ˆ ๋ชจ๋ฅด๋˜ ๋‚ด๊ฐ€ SSAFY์˜ CT๋ฅผ ๊ณต๋ถ€ํ–ˆ๋˜ ๋•์ธ์ง€ ํ•ด๋‹น ๋ฌธ์ œ๋Š” ์กฐ๊ธˆ ์ˆ˜์›”ํ•˜๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
  • ์˜ˆ์ „์— ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ํ•˜๋ฉด์„œ Math.pow() ๋ฉ”์†Œ๋“œ๋ฅผ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋๊ณ , ๊ทธ ๋•๋ถ„์— ์ œ๊ณฑ ๊ณ„์‚ฐ๋„ ์ˆ˜์›”ํ•˜๊ฒŒ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
  • ๋ณ€์ˆ˜ tmp๊ฐ€ 0์ด ๋˜๊ธฐ ์ „๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜์—ฌ n์˜ 3์ง„์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.
    • ์ด ๋•Œ, ๋‚˜๋Š” List๊ฐ€ ์“ฐ๊ธฐ ์‹ซ์–ด์„œ StringBuffer๋ฅผ ์ด์šฉํ–ˆ๋‹ค.
  • StringBuffer์— 3์ง„์ˆ˜์˜ ๊ฐ ์ž๋ฆฌ์˜ ๊ฐ’์ด ์—ญ์ˆœ์œผ๋กœ ์Œ“์ด๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€์ ์œผ๋กœ ๋ณ€ํ™˜ํ•œ 3์ง„์ˆ˜๋ฅผ ๋’ค์ง‘๋Š” ๊ณผ์ •์€ ์ƒ๋žตํ–ˆ๋‹ค.
  • score ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ , ํ•ด๋‹น ๋ณ€์ˆ˜์— StringBuffer์˜ subString์™€ Math.pow()๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ’์„ ๋”ํ•˜๋ฉด 10์ง„๋ฒ•์˜ ๊ฐ’์ด ๋œ๋‹ค.

์ฝ”๋“œ

package ์‹ฌ์„ฑํ—Œ.์•Œ๊ณ ๋ฆฌ์ฆ˜_6์ฃผ์ฐจ;

public class ์‚ผ์ง„๋ฒ•๋’ค์ง‘๊ธฐ_ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค {
    public static void main(String[] args) {
        int n = 125;
        int result = solution(n);

        System.out.println(result);
    }

    public static int solution(int n) {
        int tmp = n;
        StringBuffer sb = new StringBuffer();
        while (tmp > 0) {
            int remain = tmp % 3;
            sb.append(remain);
            tmp /= 3;
        }
        int score = 0;
        int x = sb.length() - 1;
        for (int i = 0; i < sb.length(); i++) {
            score += Integer.parseInt(sb.toString().substring(i, i + 1)) * Math.pow(3, x);
            x--;
        }
        return score;
    }
}