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:26

https://school.programmers.co.kr/learn/courses/30/lessons/17687

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

✔ 입출력 예시

[3차] n진수 게임 입출력 예시

 

 

💡 포인트

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) 를 이용하면 쉽게 구할 수 있다는 것을 알게 된 문제였다 😁

진수 구하는 방법만 잘 알고 있다면 풀기 쉬운 문제이지 않았나 싶다.

(물론 난 진수 구하는 방법을 수많은 삽질 끝에 겨우 알게되어서 문제 푸는데 애 좀 먹었다...💦)

Comments