-
[Algo Rhythm๐บ๐] ํ๋ก๊ทธ๋๋จธ์ค ๊ณ ๋์ Kit ๊ฐ์ฅ ํฐ ์Algo Rhythm๐บ๐/Programmers 2020. 6. 29. 16:21
๋ฌธ์ ์ค๋ช
0 ๋๋ ์์ ์ ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ ์๋ฅผ ์ด์ด ๋ถ์ฌ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ํฐ ์๋ฅผ ์์๋ด ์ฃผ์ธ์.
์๋ฅผ ๋ค์ด, ์ฃผ์ด์ง ์ ์๊ฐ [6, 10, 2]๋ผ๋ฉด [6102, 6210, 1062, 1026, 2610, 2106]๋ฅผ ๋ง๋ค ์ ์๊ณ , ์ด์ค ๊ฐ์ฅ ํฐ ์๋ 6210์ ๋๋ค.
0 ๋๋ ์์ ์ ์๊ฐ ๋ด๊ธด ๋ฐฐ์ด numbers๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์์๋ฅผ ์ฌ๋ฐฐ์นํ์ฌ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ํฐ ์๋ฅผ ๋ฌธ์์ด๋ก ๋ฐ๊พธ์ด return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
-
numbers์ ๊ธธ์ด๋ 1 ์ด์ 100,000 ์ดํ์ ๋๋ค.
-
numbers์ ์์๋ 0 ์ด์ 1,000 ์ดํ์ ๋๋ค.
-
์ ๋ต์ด ๋๋ฌด ํด ์ ์์ผ๋ ๋ฌธ์์ด๋ก ๋ฐ๊พธ์ด return ํฉ๋๋ค.
๋๋ ์ด๋ป๊ฒ ํ์๋
import java.util.Arrays; class Solution { public String solution(int[] numbers) { String answer = ""; //initialize Integer[] numArr = new Integer[numbers.length]; for(int i = 0; i < numbers.length; i++) { numArr[i] = numbers[i]; } // sort Arrays.sort(numArr, (o1, o2) -> { String t1 = o1.toString(); String t2 = o2.toString(); return (t2 + t1).compareTo(t1 + t2); }); //concatenating for(int i = 0; i < numArr.length; i++) { answer += numArr[i]; } //exception if(answer.startsWith("0")) return "0"; return answer; } }
๋๋ ์ ์ ๋ ๊ฒ ํ์๋
๋ฌธ์ ์ค๋ช ์ ๋์จ ์์ ๋ฅผ ์ ์ฌํ ์ดํด๋ณธ ๊ฒฐ๊ณผ ์ซ์๋ค์ด ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ฉด ๋๋ ์ค ์์๋ค. ํ์ง๋ง ๊ทธ๋ ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ๊ฒฝ์ฐ input์ด [3, 30, 34, 5, 9]์ผ ๊ฒฝ์ฐ output์ด 9534330๊ฐ ์๋๋ผ 9543330๊ฐ ๋๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค.
์์ธ์ ๋ถ์ํด๋ณด๋ ๋ด ์๊ณ ๋ฆฌ์ฆ์ ์ฃผ์ด์ง ์ ์๋ฅผ ๊ทธ ์์ฒด๊ฐ ์๋๋ผ ์๋ฆฌ์๋ก ๋๋ ์ ๋ค๋ฃฌ๋ค๋ ๊ฒ์ ๊บ ๋ฌ์๋ค. ์๋ฅผ ๋ค๋ฉด ์ ์ 43์ด ์ฃผ์ด์ง๋ฉด ๋ด ์๊ณ ๋ฆฌ์ฆ์ 43์ผ๋ก ์ทจ๊ธํ์ง ์๊ณ 4์ 3์ผ๋ก ์ทจ๊ธํ๋ ๊ฒ์ด๋ค. ์ฃผ์ด์ง ์ ์๋ฅผ ๊ทธ ์์ฒด๋ก ์ทจ๊ธํ๊ธฐ ์ํ ๋ฌด์ธ๊ฐ๊ฐ ํ์ํ๋ค.
์ฃผ์ด์ง ์ ์๋ฅผ ๊ทธ ์์ฒด๋ก ๋ค๋ฃจ๊ธฐ ์ํด์๋ ์ฃผ์ด์ง ์ ์๋ฅผ ๋ฐ๋ก ๋ด๋ ์๋ฃ๊ตฌ์กฐ๊ฐ ํ์ํ๋ค๊ณ ์๊ฐํ๋ค. ๊ทธ๋์ ArrayList๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค. ์๋ํ๋ฉด ArrayList๋ ์ฃผ์ด์ง ์ ์๋ฅผ ๋ฐ๋ก ๋ด์ ์ ์์ ๋ฟ๋ง ์๋๋ผ ์ ๋ ฌ๋ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
import java.util.ArrayList; import java.util.Comparator; class Solution { public String solution(int[] numbers) { String answer = ""; ArrayList<String> numList = new ArrayList<>(); for(int num : numbers) { numList.add(Integer.toString(num)); } numList.sort(Comparator.reverseOrder()); for(String num : numList) { answer += num; } return answer; } }
๊ทธ๋์ ์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ ๋ค ์คํํ๋ค. ์๊ฐํ๋๋๋ก ์ ์ ๊ทธ ์์ฒด๋ ๋ณด์กด๋์๋ค. ํ์ง๋ง input [3, 30, 34, 5, 9]์ ๋ํ์ฌ 9534330๊ฐ ์๋๋ผ 9534303์ returnํ๋ค.
๋ฌธ์ ์์ธ์ ๋ถ์ํ๋ค๊ฐ 'ํน์ ์ ์๋ฆฌ ์๊ฐ ๊ฐ๋ค๋ฉด ์๋ฆฟ์๊ฐ ์์์๋ก ์ฐ์ ์์๋ฅผ ๋์ฌ์ผ ํ๋๊ฑด๊ฐ?'๋ผ๋ ์๊ฐ์ ํ๋ค. ์ฆ, [30, 3]์ด input์ผ๋ก ์ฃผ์ด์ง๋ค๋ฉด 3์ด 30๋ณด๋ค ์๋ฆฟ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์์ผ๋ก ์์ 303์ด ์๋๋ผ 330์ returnํ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์ด๋ด ์๊ฐํด๋ณด๋ [34, 3, 30]์ด input์ผ๋ก ์ฃผ์ด์ง ๊ฒฝ์ฐ 34330์ returnํด์ผ ํ๋๋ฐ ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด 33430์ returnํด์ ์๊ณ ๋ฆฌ์ฆ์ด ์ณ์ง ์๋ค๋ ๊ฒ์ ์ ์ ์์๋ค.
๋์ ํ ํด๊ฒฐ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ์ด์ ์๋ ๋งํฌ์์ ๋ค๋ฅธ ๋ถ์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ๋ค. ์ด ๋ถ์ ๋ฐ๋ฅด๋ฉด String ์ํ์์ A+B์ B+A๋ฅผ ๋น๊ตํด์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ ๋์ ๋ง์ง๋ง์ด 000..์ธ ์์ธ ๊ฒฝ์ฐ๋ง ์ฒ๋ฆฌํ๋ฉด ๋๋ค๊ณ ํ์ จ๋ค.
https://programmers.co.kr/learn/questions/9355
๋๋ ๋ฌด์์ ๋ฐฐ์ ๋
๋ด๊ฐ Comparator ์ฌ์ฉ๋ฒ์ ์ต์ํ์ง ๋ชป ํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ๊ทธ๋์ ์๋ ๋ธ๋ก๊ทธ๋ฅผ ํตํด ๊ณต๋ถํ๋ค.
https://gmlwjd9405.github.io/2018/09/06/java-comparable-and-comparator.html
'Algo Rhythm๐บ๐ > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
-