하루에 한 문제
[프로그래머스-lv2 2018 KAKAO BLIND RECRUITMENT] n진수 게임 -Java 본문
알고리즘/프로그래머스 lv2 다시풀기
[프로그래머스-lv2 2018 KAKAO BLIND RECRUITMENT] n진수 게임 -Java
dkwjdi 2021. 3. 21. 23:44https://programmers.co.kr/learn/courses/30/lessons/17687
class Solution {
public String solution(int n, int t, int m, int p) {
StringBuilder answer= new StringBuilder();
String []replace= {"A","B","C","D","E","F"};
int number=-1;
int turn=1;
while(true) {
String numbers = CalJinsu(++number,n,replace);
for(int i=0; i<numbers.length(); i++) {
if(turn==p) { //튜브 순서라면
answer.append(numbers.charAt(i));
if(--t==0) return answer.toString();
}
if(++turn==m+1) turn=1;
}
}
}
private String CalJinsu(int quotient,int n, String[] replace) {
if(quotient==0) return "0";
StringBuilder sb= new StringBuilder();
while(quotient>0) {
int remain=quotient%n;
quotient/=n;
if(remain>=10) {
sb.append(replace[remain-10]);
}
else {
sb.append(remain);
}
}
return sb.reverse().toString();
}
}
소요시간 : 26분
우선 10진수 숫자를 n진수로 바꾸는 로직부터 살펴보면
1. 몫이 0이 들어오면 0을 return 한다
2. 몫이 0이 아니라면 몫/진수 -> 나머지 (StringBuilder에 저장)
2. 몫이 0과 같아지면 StringBuilder를 reverse 해서 return 해줍니다.
그리고 A~F로 매칭해야 하는 숫자는
replace라는 배열을 사용했습니다. replace 배열은 0번 Index부터 A, B, C, D, E, F 가 들어있습니다.
만약 나머지가 10보다 크다면 replace [remain-10]을 해주면 알아서 잘 찾아갑니다~
이렇게 n진수로 바꾸었다면 사실상 끝났다고 볼 수 있습니다.
그냥 for문 돌면서 튜브의 턴이라면 t를 -- 해주면서 Stringbuilder에 담아줍니다
그리고 t가 0이 되면 끝~
'알고리즘 > 프로그래머스 lv2 다시풀기' 카테고리의 다른 글
[프로그래머스-lv2]타겟 넘버 -Java (0) | 2021.03.23 |
---|---|
[프로그래머스-lv2 Summer/Winter Coding(~2018)]점프와 순간이동 -Java (0) | 2021.03.23 |
[프로그래머스-lv2] 이중우선순위큐 -Java (0) | 2021.03.19 |
[프로그래머스-lv2 2019 KAKAO BLIND RECRUITMENT] 후보키 -Java (0) | 2021.03.18 |
[프로그래머스-lv2 Summer/Winter Coding(~2018)]영어 끝말잇기 -Java (0) | 2021.03.17 |
Comments