๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Programmers lv-1

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

by ๊ทคํ”ผํ‚ค 2022. 12. 6.

 

โค๏ธ Problem

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

 

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

 

  • ์ž…์ถœ๋ ฅ ์˜ˆ & ์„ค๋ช…
no n result
1 45 7
2 125 229
  1. 45 (10์ง„๋ฒ•) → 1200 (3์ง„๋ฒ•) 0021(3์ง„๋ฒ•)  7(10์ง„๋ฒ•)
    ๋”ฐ๋ผ์„œ 7์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. 125 (10์ง„๋ฒ•) → 11122 (3์ง„๋ฒ•)  22111(3์ง„๋ฒ•)   229(10์ง„๋ฒ•)
    ๋”ฐ๋ผ์„œ 229์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 


 

๐Ÿ’› Solution

ํ’€์ด 1

class Solution {
    public int solution(int num) {
		int answer = 0;
		String ternary = Integer.toString(num, 3);
		String[] parts = ternary.split("");
		for(int i=0; i<parts.length; i++) {
			int tmp = Integer.parseInt(parts[i]);
			answer += tmp*(Math.pow(3,i));
		}
        return answer;
    }
}

 

์ฒ˜๋ฆฌ์†๋„ GOOD


 


 

ํ’€์ด 2

class Solution {
    public int solution(int num) {
		int answer = 0;
		String ternary = Integer.toString(num, 3);
		StringBuilder sb = new StringBuilder(ternary).reverse();
		answer = Integer.parseInt(sb.toString(), 3);
        	return answer;
    }
}

 

์ฒ˜๋ฆฌ์†๋„ VERY GOOD


 


 

๐Ÿ’œ Comment

์ด ๋ฌธ์ œ์—์„œ ์›๋ž˜ ์š”๊ตฌํ•œ ๊ฒƒ์€ 10์ง„๋ฒ• → 3์ง„๋ฒ• ๋ณ€ํ™˜ → ์•ž๋’ค๋ฐ˜์ „ → 10์ง„๋ฒ• ๋ณ€ํ™˜์ธ๋ฐ ๋‚˜๋Š” ์‚ฌ์‹ค ํ’€์ด 1์—์„œ 10์ง„๋ฒ• → 3์ง„๋ฒ• ๋ณ€ํ™˜ → 10์ง„๋ฒ• ๋ณ€ํ™˜์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งฐ๋‹ค.

๊ทธ ์ด์œ ๋Š” 3์ง„๋ฒ•์—์„œ 10์ง„๋ฒ•์œผ๋กœ ๋‹ค์‹œ ๋ณ€ํ™˜ํ•  ๋•Œ ๋ฐ˜์ „์„ ํ•˜์ง€ ์•Š๊ณ  String[] ๋ฐฐ์—ด parts์˜ ์•ž์ชฝ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ 3*0, 3¹, ... 3โฟ์„ ๊ณฑํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•ด๋„ return ๊ฐ’์ด ๋˜‘๊ฐ™์ด ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ตณ์ด ๋ถˆํ•„์š”ํ•œ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ์ถ”๊ฐ€ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ๊ทธ ๋ถ€๋ถ„์„ ๊ฑด๋„ˆ๋›ฐ๊ฒŒ ๋˜์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•œ ๋ถ€๋ถ„์„ ๋‹ค ์ง€ํ‚ค์ง€ ๋ชปํ•œ ๊ฒƒ ๊ฐ™์•„ ํ’€์ด 2์—์„œ๋Š” ์•ž๋’ค๋ฐ˜์ „์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜์˜€๋‹ค. StringBuilder์˜ reverse ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์•ž๋’ค๋ฅผ ๋ฐ˜์ „์‹œํ‚จ ๋’ค์— 3์ง„๋ฒ•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ๋”๋‹ˆ ์„ฑ๋Šฅ๋„ ๋” ์ข‹์•„์ง€๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๋‹ค.

 

[ ํ’€์ด 1 ]

๋จผ์ € 10์ง„์ˆ˜ num์„ Integer.toString(num, 3)์„ ํ†ตํ•ด 3์ง„๋ฒ• String์œผ๋กœ ๋ณ€ํ™˜ํ•œ ๋’ค, ๊ฐ ์ž๋ฆฟ์ˆ˜ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ String[] ๋ฐฐ์—ด์— ํ•˜๋‚˜์”ฉ ๋„ฃ์—ˆ๋‹ค. ๊ทธ ๋‹ค์Œ for ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ parts[i]๋ฅผ int๋กœ ๋ณ€ํ™˜ํ•œ ๋‹ค์Œ ๊ทธ ๊ฐ’์— Math,pow(3, i)๋ฅผ ๊ณฑํ–ˆ๋‹ค. Math.pow๋Š” ์ œ๊ณฑ ๊ฐ’์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค. ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค(0)์— 3์ง„๋ฒ•์˜ ์ฒซ๋ฒˆ์งธ ์ž๋ฆฟ์ˆ˜๋ฅผ ๊ณฑํ•˜๊ฒŒ ๋œ๋‹ค. ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๊ฐ€ ์ฆ๊ฐ€ํ•จ(n)์— ๋”ฐ๋ผ ์ž๋ฆฟ์ˆ˜(3โฟ) ์—ญ์‹œ ์ฆ๊ฐ€ํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜๊ณ , ๊ทธ ๊ฐ’์„ answer์— ๋ˆ„์ ์‹œ์ผœ returnํ•˜์˜€๋‹ค.

 

[ ํ’€์ด 2 ]

10์ง„์ˆ˜ num๋ฅผ 3์ง„๋ฒ• String ternary์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๋™์ผํ•˜๋‹ค.  ๊ทธ ๋‹ค์Œ StringBuilder์— ternary๋ฅผ ๋„ฃ๊ณ  reverse ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ญ์ˆœ์œผ๋กœ ๋ฌธ์ž์—ด์˜ ์•ž๋’ค๋ฅผ ๋ฐ”๊พธ์—ˆ๋‹ค. ๊ทธ ๋‹ค์Œ Integer.parseInt(๋ฌธ์ž์—ด(sb.toString(), ์ง„์ˆ˜(3));์„ ํ†ตํ•ด ๋‹ค์‹œ 3์ง„๋ฒ•์œผ๋กœ ์ „ํ™˜ํ•œ ๊ฐ’์„ answer์— ๋„ฃ์–ด returnํ•˜์˜€๋‹ค.

 

 

9616์œ„๊ฐ€ ๋˜์—ˆ๋‹ค!!!!!!!!!!!!! ๐Ÿ˜

 

 

 

 

๋Œ“๊ธ€