요구사항
주어진 주문서는 알파벳 소문자 1글자부터 최대 11글자까지의 모든 문자열이 사전 순으로 정렬되어 있고
일부 삭제된 주문 배열이 주어질 때 삭제된 주문을 제외한 n번째 주문을 구하기
입력 값
long n | 구해야 하는 주문의 순번 |
String[] bans | 삭제된 주문 배열 bans[i] 는 i+1 번째 삭제된 주문을 말한다. (a~z로만 구성) |
풀이
1. 문자를 순번으로 순번을 문자로 변환하는 함수 생성
-> 문자를 한 글자씩 읽어서 a=1 b=2 .... z=26 으로 변환하는 함수 생성
-> 숫자를 읽어서 26으로 나눈 나머지 를 문자로 뒷자리부터 변환하는 함수 생성
2. 삭제된 주문 배열을 모두 숫자로 변환하기
-> 구해야 하는 순번과 비교하기 위함
3. 구해야 하는 진짜 순번 찾기
-> 삭제된 주문 배열을 정렬하고 구해야하는 순번의 숫자보다 작은 경우 순번 1씩 증가시킴
4. 삭제된 주문을 적용한 새 순번을 다시 문자로 변환하여 return
728x90
Java 코드
import java.util.*;
class Solution {
public String solution(long n, String[] bans) {
String answer = "";
long num;
long[] bansNums = new long[bans.length];
for(int i=0; i<bans.length; i++) {
bansNums[i] = convertStrToNum(bans[i]);
}
Arrays.sort(bansNums);
for(long bn : bansNums) if(bn <= n) n++;
answer = convertNumToStr(n);
return answer;
}
private long convertStrToNum(String str) {
int length = str.length();
long num = 0;
for(int j=0;j<length;j++) {
num += (str.charAt(j)-96) * Math.pow(26,(length-1-j));
}
return num;
}
private String convertNumToStr(long num) {
String str = "";
while(num > 0) {
str = String.valueOf((char)((num-1)%26+1+96)) + str;
num=(num-1)/26;
}
return str;
}
}
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/389481728x90
반응형
'코딩테스트 > 코드챌린지' 카테고리의 다른 글
[2025 프로그래머스 코드챌린지 1차 예선] 홀짝트리 (Java) (0) | 2025.03.06 |
---|---|
[2025 프로그래머스 코드챌린지 2차 예선] 완전범죄 (Java) (2) | 2025.02.26 |
[2025 프로그래머스 코드챌린지 2차 예선] 서버 증설 횟수 (Java) (2) | 2025.02.19 |
[2025 프로그래머스 코드챌린지 1차 예선] 지게차와 크레인(Java) (2) | 2025.02.18 |
[2025 프로그래머스 코드챌린지 1차 예선] 비밀 코드 해독 (Java) (1) | 2025.02.18 |