https://school.programmers.co.kr/learn/challenges?tab=algorithm_practice_kit
ํธ๋ ๋์ ์ฌ๊ณ ๊ณผ์ ๋ฐ ๊ฐ์ ์
import java.util.*;
class Solution {
static boolean[] v;
static String[] out;
static int n;
static TreeSet<String> pq = new TreeSet<String>(Collections.reverseOrder());
public static void perm(int[] num, int depth){
if(depth == n){
StringBuilder sb = new StringBuilder();
for(String item: out){
sb.append(item);
}
pq.add(sb.toString());
return;
}
for(int i=0; i<num.length; i++){
if(!v[i]){
//๋ฐฉ๋ฌธํ์ง ์์์ผ๋ฉด ๋ค์์์น์ ๋ฃ๊ธฐ
v[i] = true;
out[depth] = Integer.toString(num[i]);
perm(num, depth+1);
v[i] = false;
}
}
}
public String solution(int[] numbers) {
String answer = "";
// ์์ด๋ก ์ผ๋จ ๋ง๋ค ์ ์๋ ๋ชจ๋ ๊ฒฝ์ฐ์์๋ฅผ ๋ง๋ค์ด์, PriorityQueue์ ๋ฃ๊ธฐ
n = numbers.length;
v = new boolean[n];
out = new String[n];
perm(numbers, 0);
answer = String.valueOf(pq.first());
return answer;
}
}
์ฒ์์๋ ์์ด๋ก ์ ๊ทผํ๋ฉด ๋ ์ค ์์๋ค. TreeSet์ ์ฌ์ฉํ๊ธฐ ์ ์๋ ์ฐ์ ์์ ํ๋ฅผ ์จ์ ๋ง๋ค์๋ค. ๊ทผ๋ฐ input์ ๋ณด๋ฉด
numbers ๊ธธ์ด๊ฐ 100000์ธ๋ฐ, ์ด๋ฌ๋ฉด ์์ด์์ฑ ์๊ฐ๋ณต์ก๋๊ฐ n!๋ผ์ ๋ฌด์กฐ๊ฑด ์๊ฐ์ด๊ณผ, ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
๋ฐฉ๋ฒ์ ๋ฐ๊ฟ์ผ๋๋ค.
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String[] strNumbers = new String[numbers.length];
for(int i = 0; i < numbers.length; i++) {
strNumbers[i] = String.valueOf(numbers[i]);
}
Arrays.sort(strNumbers, new Comparator<String>() {
@Override
public int compare(String a, String b) {
return (b + a).compareTo(a + b);
}
});
if(strNumbers[0].equals("0")) return "0";
StringBuilder answer = new StringBuilder();
for(String s : strNumbers) {
answer.append(s);
}
return answer.toString();
}
}
String์ผ๋ก ๋ค ๋ฐ๊พผ๋ค์, Comparator๋ฅผ ์๋ก ์ ์ํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ์ด๋ฐ ๋ฌธ์ ๋ฅผ ๋ช๋ฒ ํ์๋๋ฐ ์ด๋ ๊ฒ ํ๋ ๊ฑด ์ฒ์์ด๋ค...
# ์ถ๊ฐ ๊ณต๋ถ
`Arrays.sort(arr, new Comparator<T>(){ })`
Arrays.sort(strNumbers, new Comparator<String>() {
@Override
public int compare(String a, String b) {
return (b + a).compareTo(a + b);
}
});
์ค๋๋ง์ Comparator๋ฅผ ์ฌ์ฉํ๋๊น ์ง์ง ์๊ฐ์ด ์๋ฌ๋ค.
Arrays๋ ๋ฐฐ์ด์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์์ ์ฒ๋ฆฌํ๋๋ฐ, ์์ฐ๋ฉด ๊ณ์ ๊น๋จน์ด์ ์ผ๋จ ์ ์ด๋๋ค. ๊ฐ์ ๋(๊ธฐ์กด ์์ ์ ์ง), ์์ ๋(-1), ํด ๋(1)๋ฅผ ๊ฐ๊ฐ ๊ธฐ์ค์ผ๋ก ๋๊ณ ์ ๋ ฌ ์์๋ฅผ ๊ฒฐ์ ํ๋ค.
๋์์ด ๋๋ค๋ฉด ๋๊ธ์ด๋ ๊ณต๊ฐ ๋ฒํผ ํ ๋ฒ์ฉ ๋๋ฅด๊ณ ๊ฐ์ฃผ์ธ์!
'OJ๐ผ > Programmers ๊ณ ๋์ ํท' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LV.2][JAVA] H-Index (0) | 2024.09.01 |
---|---|
[LV.2][JAVA] ์ฌ๋ฐ๋ฅธ ๊ดํธ (0) | 2024.08.28 |
[LV.3][JAVA] ๋ฒ ์คํธ ์จ๋ฒ (0) | 2024.08.27 |
[LV.2][JAVA] ๋ ๋งต๊ฒ (0) | 2024.08.27 |
[LV.2][JAVA] ์ ํ๋ฒํธ ๋ชฉ๋ก (0) | 2024.08.25 |