하루에 한 문제
[프로그래머스 2018 KAKAO BLIND RECRUITMENT] n진수 게임 -Java 본문
https://programmers.co.kr/learn/courses/30/lessons/17687
class Solution {
public String solution(int n, int t, int m, int p) {
// n:진법 , t:미리구할 숫자의 갯수, m:게임에 참가하는 인원, p : 튜브의 순서
StringBuilder answer = new StringBuilder();
String []ABCDEF= {"A","B","C","D","E","F"};
int num=0;
int turn=1;
while(true) {
String s=changeJinsu(n,num,ABCDEF);
for(int i=0; i<s.length(); i++){
if(turn==p) {
answer.append(s.charAt(i));
if(--t==0) return answer.toString();
}
if(++turn>m) turn=1;
}
num++;
}
}
private String changeJinsu(int jinsu, int num, String[] ABCDEF) {
StringBuilder result = new StringBuilder();
int quotient=num, remainder=0;
while(quotient>=jinsu) {
remainder=quotient%jinsu; //나머지 구하기
if(remainder>=10) result.append(ABCDEF[remainder-10]); //숫자 10이상이면 바꿔서 넣기
else result.append(remainder);
quotient/=jinsu; //몫 바꿔주기
}
if(quotient>=10) result.append(ABCDEF[quotient-10]); //숫자 10이상이면 바꿔서 넣기
else result.append(quotient);
return result.reverse().toString();
}
}
소요시간 : 32분
우선 로직은
1.s에 현재의 num을 n진수로 바꾼 문자열을 넣어줍니다.
2.s의 길이만큼 for문을 돌면서 현재 턴이 튜브의 순서인지 확인해줍니다.
2-1. 튜브의 순서라면 t를 하나 줄여주고 현재 문자열의 i번째를 answer에 추가해줍니다.
2-2. 튜브의 순서가 아니라면 그냥 skip해줍니다.
3.숫자를 +1해줍니다.
그리고 10~16을 A~F로 바꿔주는 로직은
String 배열에 ABCDEF를 넣어줍니다.
그리고 나머지가 10보다 크다면 그 수에서 10을 뺀 인덱스를 String배열에 접근시켜 문자열을 뽑아오면 됩니다.
만약 숫자가 12라면 -> 12-10 = 2 이것을 String배열의 인덱스로 사용하면 C가 나오게 됩니다!
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 2021 KAKAO BLIND RECRUITMENT ]메뉴 리뉴얼 -Java (0) | 2021.01.25 |
---|---|
[프로그래머스 2021 KAKAO BLIND RECRUITMENT]신규 아이디 추천 -Java (0) | 2021.01.25 |
[프로그래머스] 행렬의 곱셈 -Java (1) | 2021.01.23 |
[프로그래머스] 올바른 괄호 -Java (1) | 2021.01.22 |
[프로그래머스 월간 코드 챌린지 시즌1]이진 변환 반복하기 (0) | 2021.01.22 |
Comments