
찾고자 하는 위치(n)의 주문보다 앞에 있는 삭제된 주문의 수 만큼 n에 더해주면 된다.
import java.util.*;
class Solution {
public String solution(long n, String[] bans) {
String answer = "";
Arrays.sort(bans, (str1, str2) -> {
if (str1.length() == str2.length()){
return str1.compareTo(str2);
}
return Integer.compare(str1.length(), str2.length());
});
for (String ban: bans){
int len = ban.length();
long sum = 0;
for (int i=0; i<len; i++){
long ascii = ban.charAt(i) - 'a' + 1;
sum += ascii * (long) Math.pow(26, len-i-1);
}
if (sum <= n){
n++;
} else {
break;
}
}
StringBuilder sb = new StringBuilder();
while (n > 0) {
long rem = n % 26;
if (rem == 0) {
rem = 26;
n -= 26;
}
sb.append((char) ( rem + 'a' - 1 ));
n /= 26;
}
return sb.reverse().toString();
}
}
배열을 모두 숫자로 바꾸고 정렬하는 것도 괜찮을지두..
