Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 쿼드압축 후 개수세기
- 후위 표기법
- python
- 튜플
- 반복문
- 어려웠던 문제
- 2017 카카오 코드
- 문자열
- dfs
- pandas
- Dynamic Programming
- 순열
- 점프와 순간이동
- 에라토스테네스의 체
- 프로그래머스
- Stack
- 완전 탐색
- 알고리즘
- 최소공배수
- 동적계획법
- Java
- fragment identifier
- 보이어무어
- 메뉴리뉴얼
- 완전탐색
- 규칙찾기
- 영문자 확인
- 조합
- HashMap
- HashSet
Archives
- Today
- Total
csmoon1010의 SW 블로그
[210125] n진수 게임 - 2018 KAKAO BLIND RECRUITMENT 본문
0. 문제유형 : 반복문 활용
1. 문제이해
programmers.co.kr/learn/courses/30/lessons/17687
코딩테스트 연습 - [3차] n진수 게임
N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0
programmers.co.kr
(1) 주요 요구사항
① 게임 규칙
- 숫자를 0부터 시작해서 차례대로 말한다. 첫 번째 사람은 0, 두 번째 사람은 1, … 열 번째 사람은 9를 말한다.
- 10 이상의 숫자부터는 한 자리씩 끊어서 말한다. 즉 열한 번째 사람은 10의 첫 자리인 1, 열두 번째 사람은 둘째 자리인 0을 말한다.
→ 이 중 튜브가 말해야 하는 숫자를 스마트폰에 미리 출력해주는 시스템
② 입력, 출력 형식
- 입력 - 진법 n : 2 <= n <= 16- 미리 구할 숫자의 갯수 t : 0 < t <= 1000- 게임에 참가하는 인원 m : 2 <= m <= 100- 튜브의 순서 p :
- 출력- 튜브가 말해야하는 숫자 t개를 공백 없이 차례대로 나타낸 문자열- 10~15는 대문자 A~F로 출력
2. 전략
(1) n진법 변환
: 기존의 n진법 구하는 원리를 활용 (Stack 자료구조 함께 활용)
number : 바꾸고자 하는 수
n : 진법
temp가 number부터 시작해 n보다 클 때까지만 반복
1. temp%n에 해당하는 문자(0~F)를 stack에 push
2. temp는 temp/n으로 갱신
3. temp가 n보다 작거나 같아지면 stack에 push
※ temp와 number의 차이를 구분하기! (에러의 원인)
Stack<String> stack = new Stack<>();
int temp = number;
while(temp >= n){
stack.push(list[temp%n]);
temp = temp/n;
}
stack.push(list[temp]);
while(!stack.empty() && index < size) answer[index++] = stack.pop();
(2) 튜브가 말할 숫자만 선택
: p, m+p, 2m+p, ... , (t-1)m+p 번째에 해당하는 숫자를 말하게 된단
→ allList[i*m+p -1]을 추가
※ 인덱스 = 순서-1임을 주의
3. 참고사항
(1) 진법 변환 함수
Integer.toString(int base, int radix) : 바로 진법으로 변경이 가능하다
→ 변환된 길이에 따라서 조건을 체크하여 훨씬 간편하게 구할 수 있다!!
class Solution {
public String solution(int n, int t, int m, int p) {
String answer = "";
int start = 0;
String target = "";
String temp = "";
while (target.length() < m * t) {
target += Integer.toString(start++, n);
}
for (int i=0; i<t; i++) {
temp += target.charAt(p - 1 + i * m);
}
answer = temp.toUpperCase();
return answer;
}
}
4. 코드
import java.util.Stack;
class Solution {
public String solution(int n, int t, int m, int p) {
String answer = "";
String[] allList = getAll(n, t*m);
for(int i = 0; i < t; i++){
answer += allList[i*m+p-1];
}
return answer;
}
public String[] getAll(int n, int size){
String[] list = new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"};
String[] answer = new String[size];
int index = 0; int number = 0;
while(index < size){
Stack<String> stack = new Stack<>();
int temp = number;
while(temp >= n){
stack.push(list[temp%n]);
temp = temp/n;
}
stack.push(list[temp]);
while(!stack.empty() && index < size) answer[index++] = stack.pop();
number++;
}
return answer;
}
}
'Coding Test > 프로그래머스' 카테고리의 다른 글
[210123] 파일명 정렬- 2018 KAKAO BLIND RECRUITMENT (0) | 2021.01.23 |
---|---|
[210118] 압축- 2018 KAKAO BLIND RECRUITMENT (0) | 2021.01.23 |
★[210101] 방금그곡 - 2018 KAKAO BLIND RECRUITMENT (0) | 2021.01.01 |
▲[201223] 캐시 - 2018 KAKAO BLIND RECRUITMENT (0) | 2020.12.23 |
[201221] 프렌즈4블록 - 2018 KAKAO BLIND RECRUITMENT (0) | 2020.12.21 |
Comments