-
[프로그래머스] n 진수 게임 (09.02)algorithm/프로그래머스 2020. 9. 2. 23:06
문제
https://programmers.co.kr/learn/courses/30/lessons/17687
접근법
알고리즘 요즘 너무 어렵다..
콘이 t번 외치려면 적어도 t*m(콘이 외칠 횟수 x 참가인원 수) 만큼은 모두 알아야 한다.
0부터 시작해서 계속 n진수로 변환을 하면서 길이를 계산하여 충분한 길이가 되었을 때 멈춘다.
n진수로 변환된 문자열에서 콘이 외쳐야할 순서의 문자들을 결과 StringBuiler에 append 해준다.
변환하는 로직은 메서드로 따로 빼서 구현했다.
처음에 0은 그냥 0이 되므로 res에 0을 append해준다.
그 후 1부터 n진수를 계산해 올라가면서 res에 append해준다.
n진수로 변환하는 로직에 대한 설명은 주석에 포함했다.
코드
class Solution { public String solution(int n, int t, int m, int p) { StringBuilder answer = new StringBuilder(); String convertedStr = convert(n, t, m); for(int i=p-1;i<convertedStr.length();i +=m){ if(answer.length() == t) break; answer.append(convertedStr.charAt(i)); } return answer.toString(); } public String convert(int n, int t, int m){ StringBuilder res = new StringBuilder(); res.append(0); int i=1; while(true){ int num = i; StringBuilder sb = new StringBuilder(); while(num > 0){ //tmp에 나머지 값을 저장한 후 int tmp = num%n; //tmp 값이 10이상이면 알파벳 출력하고 //tmp 값이 10이 안되면 순서대로 sb에 append sb.append(tmp >= 10 ? String.valueOf((char)('A' + (tmp-10))) : tmp); num/=n; } i++; //n진수를 계산하고 나서 그 결과의 역순을 res에 append res.append(sb.reverse()); if(res.length() > t*m) break; } return res.toString(); } }
'algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 길 찾기 게임(09.01) (0) 2020.09.01 [프로그래머스] 셔틀버스 (08.30) (0) 2020.08.31 [프로그래머스] 숫자 게임 (08.29) (0) 2020.08.29 [프로그래머스] 기지국 설치 (08.27) (0) 2020.08.27 [프로그래머스] 경주로 건설 (08.26) (0) 2020.08.26