๐ ํ๋ก๊ทธ๋๋จธ์ค / Sort / Level 2 / ๊ฐ์ฅ ํฐ ์
๐ ๋ฌธ์
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐ซ ์ ํ ์ฌํญ
- numbers์ ๊ธธ์ด๋ 1 ์ด์ 100,000 ์ดํ์ ๋๋ค.
- numbers์ ์์๋ 0 ์ด์ 1,000 ์ดํ์ ๋๋ค.
- ์ ๋ต์ด ๋๋ฌด ํด ์ ์์ผ๋ ๋ฌธ์์ด๋ก ๋ฐ๊พธ์ด return ํฉ๋๋ค.
๐ ์ ์ถ๋ ฅ ์
| numbers | return |
| [6, 10, 2] | "6210" |
| [3, 30, 34, 5, 9] | "9534330" |
๐ค ํ์ด ๋ฐฉ๋ฒ
โก๏ธ ๋ฒ๋ธ ์ ๋ ฌ (= ์๋ก ์ธ์ ํ ๋ ์์๋ฅผ ๊ฒ์ฌํ์ฌ ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ) ๋ก ์กฐํฉ์ ๋น๊ตํด๊ฐ๋ฉด์ ์์๋ฅผ ๊ฒฐ์ ํ๋ค.
ex) [6, 10, 2]
โ 6 ๊ณผ 10 ๋น๊ต โก๏ธ 610 > 106 โก๏ธ ์์ ์ ์ง / [6, 10, 2]
โก 10 ๊ณผ 2 ๋น๊ต โก๏ธ 102 < 210 โก๏ธ ์์ ๋ฐ๊พธ๊ธฐ / [6, 2, 10]
(์ฒซ๋ฒ์งธ turn ์ข ๋ฃ)
โข 6 ๊ณผ 2 ๋น๊ต โก๏ธ 62 > 26 โก๏ธ ์์ ์ ์ง / [6, 2, 10] (์ต์ข )
โฃ ๋ฌธ์์ด ๊ฒฐํฉ โก๏ธ answer = "6210"
๐ป ํ์ด ์ฝ๋
1๏ธโฃ ๋ฐฉ๋ฒ โ : ์ผ๋ฐ ์ ๋ ฌ๋ก ๊ตฌํ
class Solution {
public static void main(String[] args) {
String answer = "";
// ํ์ด ์์ : ์ซ์ ๋ฐฐ์ด -> ๋ฌธ์ ๋ฐฐ์ด -> ์ ๋ ฌ -> ๋ฌธ์์ด
// (1) ์ซ์ ๋ฐฐ์ด -> ๋ฌธ์ ๋ฐฐ์ด
String[] strNumbers = new String[numbers.length];
for (int i=0; i<numbers.length; i++) {
strNumbers[i] = "" + numbers[i];
}
// (2)-1 ๋ฒ๋ธ ์ ๋ ฌ
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;
}
return answer;
}
]
2๏ธโฃ ๋ฐฉ๋ฒ โก : Comparator ํ์ฉ
class Solution {
String answer = "";
String[] strNumbers = new String[numbers.length];
for (int i=0; i<numbers.length; i++) {
strNumbers[i] = "" + numbers[i];
}
// (2)-2 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); // ๋ด๋ฆผ์ฐจ์
}
});
for (String str : strNumbers) {
answer += str;
}
return answer;
}
3๏ธโฃ ๋ฐฉ๋ฒ โข : Comparator + ๋๋ค์ ํ์ฉ
class Solution {
String answer = "";
// (1) ์ซ์ ๋ฐฐ์ด -> ๋ฌธ์ ๋ฐฐ์ด
String[] strNumbers = new String[numbers.length];
for (int i=0; i<numbers.length; i++) {
strNumbers[i] = "" + numbers[i];
}
// (2)-3 Comparator + ๋๋ค์ ํ์ฉ
Arrays.sort(strNumbers, ((o1, o2) -> (o2+o1).compareTo(o1+o2)));
for (String str : strNumbers) {
answer += str;
}
return answer;
}
4๏ธโฃ ๋ฐฉ๋ฒ โฃ : Stream ํ์ฉ
import java.util.stream.Collectors;
import java.util.stream.IntStream;
class Solution {
public String solution(int[] numbers) {
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";
return answer;
}
}
[level 2] Title: ๊ฐ์ฅ ํฐ ์, Time: 5.10 ms, Memory: 65.6 MB -BaekjoonHub · Young998904/Practice_Algorithm_Auto@e1fe9db
Show file tree Showing 2 changed files with 70 additions and 0 deletions.
github.com