๐ ๊ฐ์ฅ ํฐ ์
๐ ๋ฌธ์
0 ๋๋ ์์ ์ ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ ์๋ฅผ ์ด์ด ๋ถ์ฌ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ํฐ ์๋ฅผ ์์๋ด ์ฃผ์ธ์.
์๋ก, ์ฃผ์ด์ง ์ ์๊ฐ [6, 10, 2]๋ผ๋ฉด [6102, 6210, 1062, 1026, 2610, 2106]๋ฅผ ๋ง๋ค ์ ์๊ณ , ์ด์ค ๊ฐ์ฅ ํฐ ์๋ 6210์ ๋๋ค.
0 ๋๋ ์์ ์ ์๊ฐ ๋ด๊ธด ๋ฐฐ์ด numbers๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์์๋ฅผ ์ฌ๋ฐฐ์นํ์ฌ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ํฐ ์๋ฅผ ๋ฌธ์์ด๋ก ๋ฐ๊พธ์ด return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
๐ซ ์ ํ ์ฌํญ
numbers์ ๊ธธ์ด๋ 1 ์ด์ 100,000 ์ดํ์ ๋๋ค.
numbers์ ์์๋ 0 ์ด์ 1,000 ์ดํ์ ๋๋ค.
์ ๋ต์ด ๋๋ฌด ํด ์ ์์ผ๋ ๋ฌธ์์ด๋ก ๋ฐ๊พธ์ด return ํฉ๋๋ค.
๋ง์ฝ ๋ฌธ์์ด์ด 0์ผ๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ ๊ฒฝ์ฐ "0" ์ return ํฉ๋๋ค.
๐ ์ ์ถ๋ ฅ ์

๐ค ํ์ด ๋ฐฉ๋ฒ
๋จ์ ์ซ์์ ์ ๋ ฌ์ ํ์ฌ ์ํฉ์ ๋ง์ง ์๋ค. ๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ธํด๋ณด๋ ๊ฒ๋ ๋ฌด๋ชจํ๋ค. ๋ฐ๋ผ์ ๋ฌธ์์ด์ ๋ฒ๋ธ ์ ๋ ฌ์ ํตํด์ ํฌ๊ธฐ์์ผ๋ก ์ ๋ ฌํด์ผ ํ๋ค.
๐ป ํ์ด ์ฝ๋
1๏ธโฃ Bubble Sort ์ฌ์ฉ
public class ๊ฐ์ฅ_ํฐ_์ {
public static void main(String[] args) {
String answer = "";
// ํ์ด ์์ : ์ซ์ ๋ฐฐ์ด -> ๋ฌธ์ ๋ฐฐ์ด -> ์ ๋ ฌ -> ๋ฌธ์์ด
int[] numbers = {6, 10, 2};
// (1) ์ซ์ ๋ฐฐ์ด -> ๋ฌธ์ ๋ฐฐ์ด
String[] strNumbers = new String[numbers.length];
for (int i=0; i<numbers.length; i++) {
strNumbers[i] = "" + numbers[i];
}
// (2) ์ ๋ ฌ
for (int i=1; i<strNumbers.length; i++) {
for (int j=0; j<strNumbers.length-i; j++) {
String s1 = strNumbers[j];
String s2 = strNumbers[j+1];
if ((s1+s2).compareTo(s2+s1) < 0) {
strNumbers[j+1] = s1;
strNumbers[j] = s2;
}
}
}
// (3) ๋ฌธ์์ด
for (String str : strNumbers) {
answer += str;
}
// cf) ์์ธ์ฒ๋ฆฌ
if (answer.startWith("0")) return "0";
System.out.println(answer);
}
}
2๏ธโฃ Arrays.sort() ์ฌ์ฉ โ
// (2) ์ ๋ ฌ ๋ถ๋ถ๋ง ์์ with Comparator ์ฌ์ฉ
Arrays.sort(strNumbers, new Comparator<String>() {
public int compare(String o1, String o2) {
// return (o1+o2).compareTo(o2+o1); // ์ค๋ฆ์ฐจ์
return (o2+o1).compareTo(o1+o2); // ๋ด๋ฆผ์ฐจ์
}
});
3๏ธโฃ Arrays.sort() ์ฌ์ฉ โก : ๋๋ค์ ํ์ฉ
// (2) ์ ๋ ฌ ๋ถ๋ถ๋ง ์์
// ๋ฐฉ๋ฒ 2 ์์ + ๋๋ค์ ํ์ฉ
Arrays.sort(strNumbers, ((o1, o2) -> (o2+o1).compareTo(o1+o2)));
โก๏ธ Arrays.sort ์ ๋๋ฒ์งธ ์ธ์๋ Comparator ํ๋๋ก ๊ณ ์ ๋์ด์๊ธฐ ๋๋ฌธ์ new Comparator ์๋ต๊ฐ๋ฅํ๋ฉฐ, Comparator ์๋ compare ๋ฉ์๋ ํ๋๋ง ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋ํ ์๋ต์ด ๊ฐ๋ฅํ๋ค. ์ถ๊ฐ๋ก ์ฒซ๋ฒ์งธ์ธ StrNumbers ์ ํ์ ์ด String ์ด๋ฏ๋ก compare ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๊ฐ String ์ธ๊ฒ์ ๊ณ ์ ์ ์ด๋ฏ๋ก ์ด๋ค ๋ฌธ์์ด์ ์ฌ์ฉํ ์ง๋ ๋ช ์ํด์ฃผ์ด์ผ ํ๋ค. ๋ง์ง๋ง์ผ๋ก -> ๋ฅผ ํตํด ๊ตฌํ ๋ด์ฉ์ ์์ฑํ๋ฉด ๋๋ค.
4๏ธโฃ Stream ์ฌ์ฉ (์๋ฐ 8 ์ด์)
public class ๊ฐ์ฅ_ํฐ_์ {
public static void main(String[] args) {
int[] numbers = {6, 10, 2};
String answer = IntStream.of(numbers)
.mapToObj(n->String.valueOf(n))
.sorted((s1,s2)->(s2+s1).compareTo(s1+s2))
.collect(Collectors.joining());
if (answer.startsWith("0")) answer = "0";
System.out.println(answer);
}
}
'Algorithm ๐ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์ด๋ถ ํ์ ๐ (Binary Search) (0) | 2023.04.17 |
|---|---|
| ๊ทธ๋ํ๐ (Graph) (0) | 2023.03.21 |
| ๋์ ๊ณํ๋ฒ๐๏ธ (Dynamic Programming) (0) | 2023.03.13 |
| ๊น์ด ์ฐ์ ํ์ (DFS) & ๋๋น ์ฐ์ ํ์ (BFS ) (0) | 2023.01.15 |
| [๐จ ์ปค๋ฎค๋ฌ๋/7๊ธฐ/Java] ๊ธฐ์ง๊ตญ ์ค์น (Greedy Algorithm) (0) | 2022.10.26 |