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 | 31 |
Tags
- Java
- 알고리즘
- 재귀
- ReactJS로 영화 웹 서비스 만들기
- 자바
- 노마드코더
- 달빛캠퍼스
- 백준
- BOJ
- dfs
- 달빛클럽 1기
- 인플레이션에서 살아남기
- 리액트
- 경제공부
- 달빛클럽
- 완전탐색
- Stack
- SWEA
- React
- React.js
- Algorithm
- JPA
- HashMap
- 달빛클럽1기
- Array
- 프로그래머스
- 카카오블라인드코딩테스트
- 노마드코더 강의
- programmers
- SoftwareExpertAcademy
Archives
- Today
- Total
th42500의 TIL
[Java] 2018 KAKAO BLIND RECUITMENT - [3차] n진수 게임 (Lv2) 본문
Algorithm/Programmers
[Java] 2018 KAKAO BLIND RECUITMENT - [3차] n진수 게임 (Lv2)
th42500 2022. 8. 1. 23:26https://school.programmers.co.kr/learn/courses/30/lessons/17687
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
✔ 입출력 예시
💡 포인트
1️⃣ "10이상의 숫자부터는 한 자리씩 끊어서 말한다"는 의미는 0~9까지 한 사람당 숫자 하나씩 말하다가 두글자 이상의
숫자부터는 한사람씩 끊어서 말한다는 의미
즉, 10은 1, 0 으로 끊어서 열한번째 사람과 열두번째 사람이, 11은 1, 1로 끊어서 열세번째 사람과 열네번째 사람이
말한다는 의미
2️⃣ 게임에 참여한 모든 사람이 돌아가면서 한글자씩 말하므로 튜브가 말하는 순서는 p번째, p+m, p+m+m...
3️⃣ 튜브가 말해야하는 횟수가 정해져있음 = t
4️⃣ 16진수의 경우 10이상의 숫자는 a~f까지로 표현이 되는데, 이는 대문자로 출력되어야 함
✔ 소스코드
public class Solution { // N진수 게임
public static void main(String[] args) {
// int n = 2;
// int t = 4;
// int m = 2;
// int p = 1;
// int n = 16;
// int t = 16;
// int m = 2;
// int p = 1;
int n = 16;
int t = 16;
int m = 2;
int p = 2;
System.out.println(solution(n, t, m, p));
}
private static String solution(int n, int t, int m, int p) {
StringBuilder answer = new StringBuilder(); // 정답을 담을 StringBuilder
StringBuilder sb = new StringBuilder(); // 진수를 담을 StringBuilder
int num = 0;
while (sb.toString().length() <= t * m) { // 진수를 담은 문자열을 구해야하는 문자열의 길이만큼까지만 구하기
sb.append(Integer.toString(num, n)); // n진수 구하기
num++; // 0부터 1씩 늘려가기
}
int idx = p - 1; // 인덱스 0 = 첫번째 사람
while (answer.toString().length() < t) { // 튜브가 말해야하는 숫자 t개까지만 반복
String str = sb.toString().substring(idx, idx + 1); // 문자열 하나씩 자르기
if (str.matches("[a-f]")) { // 자른 문자열이 a~f안에 포함된다면 대문자로 변환
answer.append(sb.toString().substring(idx, idx + 1).toUpperCase());
} else {
answer.append(sb.toString().substring(idx, idx + 1));
}
idx += m; // 모든 사람이 돌아가고 다음 튜브 차례는 +m번째
}
return answer.toString(); // 정답을 문자열로 반환
}
}
❗ 결과
n진수를 구하기 위해서 Integer.toString(n진수를 구하기 위한 수, n) 를 이용하면 쉽게 구할 수 있다는 것을 알게 된 문제였다 😁
진수 구하는 방법만 잘 알고 있다면 풀기 쉬운 문제이지 않았나 싶다.
(물론 난 진수 구하는 방법을 수많은 삽질 끝에 겨우 알게되어서 문제 푸는데 애 좀 먹었다...💦)
'Algorithm > Programmers' 카테고리의 다른 글
[Java] 월간 코드 챌린지 시즌1 - 이진 변환 반복하기 (Lv2) (0) | 2022.08.03 |
---|---|
[Java] 연습문제 - 최댓값과 최솟값 (Lv2) (0) | 2022.08.02 |
[Java] 2022 KAKAO BLIND RECRUITMENT - k진수에서 소수 개수 구하기 (Lv2) (0) | 2022.08.01 |
[Java] 프로그래머스 동적계획법(Dynamic Programming) Lv3 - 등굣길 (0) | 2022.04.18 |
[Java] 프로그래머스 해시 Lv1 - 폰켓몬 (0) | 2022.04.04 |
Comments