λšœλΆ€λ‹ˆμ˜ Devlog

[Programmers] nμ§„μˆ˜ κ²Œμž„ (Java)

by λšœλΆ€λ‹ˆ

 

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - [3μ°¨] nμ§„μˆ˜ κ²Œμž„

Nμ§„μˆ˜ κ²Œμž„ νŠœλΈŒκ°€ ν™œλ™ν•˜λŠ” μ½”λ”© λ™μ•„λ¦¬μ—μ„œλŠ” μ „ν†΅μ μœΌλ‘œ ν•΄μ˜€λŠ” κ²Œμž„μ΄ μžˆλ‹€. 이 κ²Œμž„μ€ μ—¬λŸ¬ μ‚¬λžŒμ΄ λ‘₯κΈ€κ²Œ μ•‰μ•„μ„œ 숫자λ₯Ό ν•˜λ‚˜μ”© μ°¨λ‘€λŒ€λ‘œ λ§ν•˜λŠ” κ²Œμž„μΈλ°, κ·œμΉ™μ€ λ‹€μŒκ³Ό κ°™λ‹€. 숫자λ₯Ό 0

programmers.co.kr

 

이 λ¬Έμ œλŠ” n진법을 κ΅¬ν•˜λŠ” 방법을 μ μš©ν•˜λ©΄ μ‰½κ²Œ ν•΄κ²°ν•  수 μžˆλŠ” λ¬Έμ œμž…λ‹ˆλ‹€ 😎😎

각 숫자의 λ²”μœ„λ„ 크지 μ•Šμ•„μ„œ mλͺ…μ˜ 인원이 t번 λ™μ•ˆ μ§„ν–‰ν•˜λ©΄μ„œ λ‚˜μ˜¬ 수 μžˆλŠ” λͺ¨λ“  숫자 리슀트λ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

λ‹€μ‹œ λ§ν•˜μžλ©΄, [0, 1, 2, 3] 에 λŒ€ν•΄ 2μ§„λ²•μœΌλ‘œ λ§ν•˜λ©΄

0 → 0

1 → 1

2 → 10

3 → 11

κ³Ό 같은 λ°©μ‹μœΌλ‘œ λ°”κΎΌ [0, 1, 1, 0, 1, 1]을 μ €μž₯ν•΄λ‘λŠ” λ°©μ‹μœΌλ‘œ μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

이 λ•Œ, λ¦¬μŠ€νŠΈμ— μ €μž₯ν•˜λŠ”κ²Œ μ•„λ‹Œ n진법 κ΅¬ν•˜λŠ” 방식을 μ‰½κ²Œ μ μš©ν•˜κΈ° μœ„ν•΄ StringBufferλ₯Ό μ΄μš©ν–ˆμ–΄μš”

ν˜„μž¬ ꡬ할 μˆ«μžκ°€ 5이고, 2진법을 μ μš©ν•œλ‹€λ©΄

5 % 2 = 0, 5 / 2 = 2

2 % 2 = 0, 2 / 2 = 1

μ΄λ―€λ‘œ 5λŠ” 2μ§„λ²•μœΌλ‘œ 100μ΄μž–μ•„μš”

계산은 μœ„μ˜ μˆœμ„œλŒ€λ‘œ μ§„ν–‰λ˜κΈ° λ•Œλ¬Έμ— 각 λ‚˜λ¨Έμ§€μ— λŒ€ν•΄ μ €μž₯해두고, λ§ˆμ§€λ§‰μ— λͺ«μ„ μΆ”κ°€ν•˜λ©΄ 001이 λ˜λŠ”λ°

이 001을 λ’€μ§‘μœΌλ©΄ 100으둜 μ›ν•˜λŠ” 값을 ꡬ할 μˆ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.

μ΄λ ‡κ²Œ λ’€μ§‘λŠ” 방식은 StringBufferμ—μ„œ μ œκ³΅ν•˜λŠ” reverse()둜 μ‰½κ²Œ ν•΄κ²°ν•  수 μžˆμ–΄μš”!

κ·Έλž˜μ„œ String Bufferλ₯Ό μ΄μš©ν–ˆμŠ΅λ‹ˆλ‹€. 😁😁

 

μ½”λ“œλŠ” λ‹€μŒκ³Ό 같이 μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

 

import java.util.*;

class Solution {
    public String solution(int n, int t, int m, int p) {
        String answer = "";
        StringBuffer strBuff = new StringBuffer(); // κ²Œμž„ 진행 μ‹œ μˆ«μžμ— λŒ€ν•΄ μ €μž₯
        String[] decimal = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"}; // 숫자 κ·œμΉ™ μ μš©μ„ μœ„ν•΄ λ§Œλ“  λ°°μ—΄
        int gameCnt = t * m; // t * m번 μ•ˆμ— νŠœλΈŒκ°€ t개의 숫자λ₯Ό 말함
        int num = 0; // κ²Œμž„ μˆ«μžλŠ” 0λΆ€ν„° μ‹œμž‘
        
        while (strBuff.length() < gameCnt) {
            if (num < n)
                strBuff.append(decimal[num]);
            else {
                StringBuffer subStrBuff = new StringBuffer(); // ν˜„μž¬ 숫자의 n진법에 λŒ€ν•΄ μž„μ‹œλ‘œ μ €μž₯ν•  str
                int temp = num;
                while (temp >= n) {
                    int mod = temp%n;
                    subStrBuff.append(decimal[mod]);
                    temp /= n;
                }
                subStrBuff.append(decimal[temp]);
                strBuff.append(subStrBuff.reverse());
            }
            
            num++;
        }
        
        p--; // μˆ«μžκ°€ 0λΆ€ν„° μ‹œμž‘μ΄λ―€λ‘œ μˆœμ„œλŠ” -1 ν•΄μ€˜μ•Ό 함
        for (int i = 0; i < t; i++) {
            answer += strBuff.charAt(p);
            p += m;
        }
        
        return answer;
    }
}

 

λΈ”λ‘œκ·Έμ˜ 정보

λšœλΆ€λ‹ˆμ˜ Devlog

λšœλΆ€λ‹ˆ

ν™œλ™ν•˜κΈ°