1. 문제
https://programmers.co.kr/learn/courses/30/lessons/17687
2. 접근방법
처음엔 수리적으로 접근해보려 했는데
m 과 t 가 작으니 모든 숫자를 구하고 각 순서에 해당하는 수를 꺼내오는 식으로 풀이했다.
각 진법에 맞춰 1부터 쭉 변환하여 list에 저장한다.
list의 크기가 m*t, 즉 t순번이 모두 돌때까지만 저장하고
이제 튜브 순서에 맞는 숫자들만 꺼내서 저장하여 출력하면 된다.
3. 자바 코드
import java.util.ArrayList;
import java.util.List;
public class P17687n진수게임 {
public String solution(int n, int t, int m, int p) {
String answer = "";
List<Character> numList = new ArrayList<Character>();
int num = 1;
numList.add('0');
while (numList.size() < t * m) {
int target = num;
String s = "";
while (target != 0) {
int mod = target % n;
mod = mod >= 10 ? 'A' + mod - 10 : '0' + mod;
s = (char) mod + s;
target = target / n;
}
for (char c : s.toCharArray())
numList.add(c);
num++;
}
for (int i = p-1; answer.length() < t; i += m)
answer += numList.get(i);
return answer;
}
}
4. 마치며
진법 변환 후 0~F 까지 수를 배열에 저장해서
매핑하는 방식의 풀이가 있었는데
이게 가장 깔끔한 것 같다.
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 17685 자동완성(2018 카카오 블라인드) (0) | 2021.07.06 |
---|---|
[프로그래머스] 17686 파일명 정렬문제(2018 카카오 블라인드) (1) | 2021.07.06 |
[프로그래머스] 17678 셔틀버스(2018 카카오 블라인드) (0) | 2021.07.01 |
[프로그래머스] 17683 방금그곡(2018 카카오 블라인드) (0) | 2021.07.01 |
[프로그래머스] 17684 압축 (2018 카카오 블라인드) (0) | 2021.07.01 |