프로그래머스
2018 KAKAO BLIND RECRUITMENT
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[3차] N진수 게임
문제 정리
1. 숫자를 0부터 시작해서 9까지 차례대로 말하는 게임
2. 10 이상부터는 한 자리씩 끊어서 말하는 것 but 숫자를 n진수로 바꿔서 게임을 한다....
3. 진법 n, 미리 구할 숫자의 개수 t, 게임에 참가하는 인원 m, 튜브의 순서 p 가 주어진다.
4.튜브가 말해야 할 문자열을 출력한다.
시작하기 전 접근 방법
1. 미리 구해야하는 문자 t개와 참가자 m 명이 존재하기 때문에 진법을 구해야 할 수를 t*m번 반복할 for문을 만든다.
2. n진수로 바꿀 Integer.toString(바꿀 숫자, n진법)을 이용한다 → String형반환
3. 반환한 String에서 튜브 차례를 구하고 해당 차례에 숫자를 subString을 이용하여 1개 가져온다.
4. 구해야 하는 String 길이가 t가 되면 반복문 종료 / 아니면 튜브 차례를 찾기 위해 튜브 순서에서 인원수만큼 플러스한다.

1. 현재 차례와 튜브 차례를 설정할 변수를 먼저 생성한다.
int index = 0; //현재 차례
int turn = p; // 튜브 차례
2~4 t*m번 숫자를 반복해서 n진법 진수 값을 구한다. String형 tmp에서 값을 찾을 때 2번째 반복문이 돌 때마다 index순서를 1씩 증가시켜 순번이 돌고 있는 것을 표현하며 튜브차례랑 현재 차례가 같을 때 subString을 이용해서 문자 1개를 가져온다. 구해야 하는 answer이 t값과 같으면 반복문을 종료한다. 아니면 다음 튜브 차례를 구하기 위해 현재 튜프 차례에서 인원수만큼 증가시켜서 순번을 기다린다.
for(int i=0; i<t*m; i++){
String tmp = Integer.toString(i,n).toUpperCase();
for(int j=0; j<tmp.length();j++){
index++;
if(index==turn){
answer += tmp.substring(j,j+1);
if(answer.length()==t){
break;
}
turn +=m;
}
}
실수한 부분
Integer.toString을 이용해서 n진법 수를 구했을 때 16진법을 계산할 경우 toUpperCase()를 사용하지 않으면 소문자로 출력이 된다. 하지만 문제에서 result는 다 대문자로 나와있기 때문에 대문자로 바꿔주는 toUpperCase()를 사용해서 대문자로 바꿔줘야지 틀리는 실수를 하지 않는다. 이 부분을 생각하지 않아서 사소한 실수가 발생했다!
전체 코드
더보기
class Solution {
public String solution(int n, int t, int m, int p) {
String answer = "";
int index = 0; //현재 차례
int turn = p; // 튜브 차례
for(int i=0; i<t*m; i++){
String tmp = Integer.toString(i,n).toUpperCase();
for(int j=0; j<tmp.length();j++){
index++;
if(index==turn){
answer += tmp.substring(j,j+1);
if(answer.length()==t){
break;
}ㅅ
turn +=m;
}
}
}
return answer;
}
}
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] 오픈채팅방 (1) | 2024.01.25 |
|---|---|
| [프로그래머스] 파일명 정렬 (0) | 2024.01.23 |
| [프로그래머스] 압축 (2) | 2024.01.23 |
| [프로그래머스] 튜플 (0) | 2024.01.20 |
| [프로그래머스] 뉴스 클러스터링 (1) | 2024.01.19 |