반응형
https://programmers.co.kr/learn/courses/30/lessons/17687
풀이
이 문제에서는 우선 진법 변환부터 해주고 그 진법 변환한 문자열을 모두 이어붙여주는 것으로 시작합니다.
사실 이부분만 하면 다 푼거나 다름 없습니다.
- 우선은 진법 변환에 쓸 HashMap부터 만들어 줍니다. 16진수가 최대이므로 0~15까지 의 키를 갖도록 생성했습니다.
- 전체 진법 변환 문자열을 저장할 total이라는 문자열에 첫번째 수인 0 이 변환된 "0"을 넣어주고 그 다음 수인 1부터 코드 상으로 진법 변환을 해 이어 붙여줍니다.
- 그렇게 진법 변환을 하며 생성한 total 문자열의 길이가 m*t이상이 될 때 까지 이를 반복합니다.
- 그런 뒤 for(i=0; i<t; i++) 루프를 이용해서 answer문자열에 m*i+p-1번째 문자만 연결해줍니다.
위와 같은 간단한 방법으로 풀리는 문제입니다.
import java.util.*;
class Solution {
public String solution(int n, int t, int m, int p) {
HashMap <Integer, String> m1 = new HashMap<Integer, String> ();
m1.put(0, "0"); m1.put(1, "1"); m1.put(2, "2"); m1.put(3, "3");
m1.put(4, "4"); m1.put(5, "5"); m1.put(6, "6"); m1.put(7, "7");
m1.put(8, "8"); m1.put(9, "9"); m1.put(10, "A"); m1.put(11, "B");
m1.put(12, "C"); m1.put(13, "D"); m1.put(14, "E"); m1.put(15, "F");
String answer = "";
int num = 1;
String total = "0"; //진법 변환한 값 이어붙임
int cnt = 1; //total길이
while(true){
int len = 0; //변환한 길이
String tmp = ""; //num 진법 변환
int now = num;
//진법 변환
while(now > 0) {
int r = now % n;
now = now / n;
tmp = m1.get(r) + tmp;
len ++;
}
total = total + tmp;
cnt += len;
num++;
//total의 길이가 m*t에 도달함
if(cnt >= m*t)
break;
}
//t개 뽑기
for(int i=0; i<t; i++){
answer += total.charAt(m*i + p -1);
}
return answer;
}
}
728x90
반응형
'알고리즘 > PS - 프로그래머스' 카테고리의 다른 글
[프로그래머스 - Java] 입국심사 (0) | 2021.08.30 |
---|---|
[프로그래머스 - Java] 땅따먹기 (0) | 2021.08.30 |
[프로그래머스 - Java] 다음 큰 숫자 (0) | 2021.08.26 |
[프로그래머스 - Java] 괄호 회전하기 (0) | 2021.08.26 |
[프로그래머스 - Java] 모두 0으로 만들기 (0) | 2021.08.23 |