๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ฆ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/๐Ÿ—‚๏ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด(Java)

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Java] n์ง„์ˆ˜ ๊ฒŒ์ž„

by ์‚๋šค์˜ค๋ฆฌ 2025. 9. 2.

๋ฌธ์ œ ์„ค๋ช…

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก์˜ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

ํŠœ๋ธŒ๊ฐ€ ํ™œ๋™ํ•˜๋Š” ์ฝ”๋”ฉ ๋™์•„๋ฆฌ์—์„œ๋Š” ์ „ํ†ต์ ์œผ๋กœ ํ•ด์˜ค๋Š” ๊ฒŒ์ž„์ด ์žˆ๋‹ค. ์ด ๊ฒŒ์ž„์€ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ๋‘ฅ๊ธ€๊ฒŒ ์•‰์•„์„œ ์ˆซ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ์ฐจ๋ก€๋Œ€๋กœ ๋งํ•˜๋Š” ๊ฒŒ์ž„์ธ๋ฐ, ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ์ˆซ์ž๋ฅผ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ฐจ๋ก€๋Œ€๋กœ ๋งํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์‚ฌ๋žŒ์€ 0, ๋‘ ๋ฒˆ์งธ ์‚ฌ๋žŒ์€ 1, … ์—ด ๋ฒˆ์งธ ์‚ฌ๋žŒ์€ 9๋ฅผ ๋งํ•œ๋‹ค.
  2. 10 ์ด์ƒ์˜ ์ˆซ์ž๋ถ€ํ„ฐ๋Š” ํ•œ ์ž๋ฆฌ์”ฉ ๋Š์–ด์„œ ๋งํ•œ๋‹ค. ์ฆ‰ ์—ดํ•œ ๋ฒˆ์งธ ์‚ฌ๋žŒ์€ 10์˜ ์ฒซ์ž๋ฆฌ์ธ 1, ์—ด๋‘ ๋ฒˆ์งธ ์‚ฌ๋žŒ์€ ๋‘˜์งธ ์ž๋ฆฌ์ธ 0์„ ๋งํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ๊ฒŒ์ž„์„ ์ง„ํ–‰ํ•  ๊ฒฝ์šฐ,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, …
์ˆœ์œผ๋กœ ์ˆซ์ž๋ฅผ ๋งํ•˜๋ฉด ๋œ๋‹ค.

ํ•œํŽธ ์ฝ”๋”ฉ ๋™์•„๋ฆฌ ์ผ์›๋“ค์€ ์ปดํ“จํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์‚ฌ๋žŒ๋‹ต๊ฒŒ ์ด์ง„์ˆ˜๋กœ ์ด ๊ฒŒ์ž„์„ ์ง„ํ–‰ํ•˜๊ธฐ๋„ ํ•˜๋Š”๋ฐ, ์ด ๊ฒฝ์šฐ์—๋Š”
0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, …
์ˆœ์œผ๋กœ ์ˆซ์ž๋ฅผ ๋งํ•˜๋ฉด ๋œ๋‹ค.

์ด์ง„์ˆ˜๋กœ ์ง„ํ–‰ํ•˜๋Š” ๊ฒŒ์ž„์— ์ต์ˆ™ํ•ด์ ธ ์งˆ๋ ค๊ฐ€๋˜ ์‚ฌ๋žŒ๋“ค์€ ์ข€ ๋” ๋‚œ์ด๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ด์ง„๋ฒ•์—์„œ ์‹ญ์œก ์ง„๋ฒ•๊นŒ์ง€ ๋ชจ๋“  ์ง„๋ฒ•์œผ๋กœ ๊ฒŒ์ž„์„ ์ง„ํ–‰ํ•ด ๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ˆซ์ž ๊ฒŒ์ž„์ด ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ํŠœ๋ธŒ๋Š” ๊ฒŒ์ž„์— ์ ธ์„œ ๋ฒŒ์น™์„ ๋ฐ›๋Š” ๊ตด์š•์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด, ์ž์‹ ์ด ๋งํ•ด์•ผ ํ•˜๋Š” ์ˆซ์ž๋ฅผ ์Šค๋งˆํŠธํฐ์— ๋ฏธ๋ฆฌ ์ถœ๋ ฅํ•ด ์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค. ํŠœ๋ธŒ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌํ˜„ํ•˜๋ผ.

์ž…๋ ฅ ํ˜•์‹

์ง„๋ฒ• n, ๋ฏธ๋ฆฌ ๊ตฌํ•  ์ˆซ์ž์˜ ๊ฐฏ์ˆ˜ t, ๊ฒŒ์ž„์— ์ฐธ๊ฐ€ํ•˜๋Š” ์ธ์› m, ํŠœ๋ธŒ์˜ ์ˆœ์„œ p ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

  • 2 โ‰ฆ n โ‰ฆ 16
  • 0 ๏ผœ t โ‰ฆ 1000
  • 2 โ‰ฆ m โ‰ฆ 100
  • 1 โ‰ฆ p โ‰ฆ m

์ถœ๋ ฅ ํ˜•์‹

ํŠœ๋ธŒ๊ฐ€ ๋งํ•ด์•ผ ํ•˜๋Š” ์ˆซ์ž t๊ฐœ๋ฅผ ๊ณต๋ฐฑ ์—†์ด ์ฐจ๋ก€๋Œ€๋กœ ๋‚˜ํƒ€๋‚ธ ๋ฌธ์ž์—ด. ๋‹จ, 10~15๋Š” ๊ฐ๊ฐ ๋Œ€๋ฌธ์ž A~F๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ์ œ

n t m p result
2 4 2 1 "0111"
16 16 2 1 "02468ACE11111111"
16 16 2 2 "13579BDF01234567"

 

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ

import java.util.*;

class Solution {
    public String solution(int n, int t, int m, int p) {
        // ์ •๋‹ต ์ €์žฅํ•  ๋ณ€์ˆ˜ ์ƒ์„ฑ
        String answer = "";
        
        // ํ˜„์žฌ ์ˆซ์ž
        int i = 0;
        // ํ˜„์žฌ ์ˆœ์„œ
        int j = 1;
        // ์ •๋‹ต ๊ฐœ์ˆ˜
        int cnt = 0;
        
        // ์ข…๋ฃŒ ํ”Œ๋ž˜๊ทธ
        boolean end = false;
        
        // ๋ฐ˜๋ณต๋ฌธ ์ง„ํ–‰
        while(!end) {
            // ํ˜„์žฌ ์ˆซ์ž๋ฅผ ์ง„๋ฒ• ๋ณ€ํ™˜
            String s = Integer.toString(i, n).toUpperCase();
            
            // ๋ณ€ํ™˜๋œ ์ˆซ์ž๋งŒํผ ํ˜„์žฌ ์ˆœ์„œ๋ฅผ ์ฒดํฌ
            for (char c : s.toCharArray()) {
                // ํ˜„์žฌ ์ˆœ์„œ๊ฐ€ ์ธ์›์ˆ˜๋ฅผ ๋„˜์œผ๋ฉด, ๋‹ค์‹œ 1๋ถ€ํ„ฐ ๊ณ„์‚ฐ
                if (j == m + 1) {
                    j = 1;
                }
                
                // ํ๋ธŒ ์ˆœ์„œ๋ผ๋ฉด ์ •๋‹ต์— ์ถ”๊ฐ€
                if (p == j) {
                    answer += String.valueOf(c);
                    // ์ •๋‹ต ๊ฐœ์ˆ˜ ์ฆ๊ฐ€
                    cnt++;
                }
                
                // ์ •๋‹ต ๊ฐœ์ˆ˜์™€ ๊ตฌํ•ด์•ผ ํ•  ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™์œผ๋ฉด ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฃŒ
                if (cnt == t) {
                    end = true;
                    break;
                }
                j++;
            }
            i++;
        }
        
        // ์ •๋‹ต ๋ฐ˜ํ™˜
        return answer;
    }
}

๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ์ƒ๊ฐํ•œ ๋ฐฉํ–ฅ

์ฒ˜์Œ ๋ฌธ์ œ๋ฅผ ๋ดค์„ ๋•Œ, ์ฃผ์–ด์ง„ ์กฐ๊ฑด์€ ์—ฌ๋Ÿฌ ๋ช…์ด ์ˆœ์„œ๋Œ€๋กœ ๋Œ์•„๊ฐ€๋ฉฐ ์ˆซ์ž๋ฅผ ๋งํ•˜๋Š” ๊ฒŒ์ž„์—์„œ ํŠน์ • ์‚ฌ๋žŒ์˜ ์ฐจ๋ก€์— ํ•ด๋‹นํ•˜๋Š” ์ˆซ์ž๋“ค์„ n์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ด ์ด์–ด ๋ถ™์—ฌ ๋‹ต์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ดํ•ดํ–ˆ๋‹ค. ์ฆ‰, ๋ชจ๋“  ์ˆ˜๋ฅผ n์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ด ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•˜๊ณ , ๊ทธ์ค‘์—์„œ p๋ฒˆ์งธ ์‚ฌ๋žŒ์˜ ์ฐจ๋ก€์— ํ•ด๋‹นํ•˜๋Š” ์ˆซ์ž๋“ค์„ ์ฐจ๋ก€๋กœ ๋ชจ์•„ t๊ฐœ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฌธ์ œ์˜€๋‹ค.

์กฐ๊ฑด์„ ๋ถ„์„ํ•ด ๋ณด๋‹ˆ, ๊ธฐ๋ณธ์ ์œผ๋กœ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ฐจ๋ก€๋Œ€๋กœ ์ˆซ์ž๋ฅผ n์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ๋˜๊ณ , ๋ณ€ํ™˜๋œ ๋ฌธ์ž์—ด์„ ํ•œ ์ž๋ฆฌ์”ฉ ๋‚˜๋ˆ„์–ด ํ”Œ๋ ˆ์ด์–ด๋“ค์—๊ฒŒ ๋ฐฐ๋ถ„ํ•˜๋ฉด ๋œ๋‹ค. ๊ฐ ์ˆซ์ž๋Š” ์—ฌ๋Ÿฌ ์ž๋ฆฌ๋กœ ํ‘œํ˜„๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‹จ์ˆœํžˆ "์ˆซ์ž ๋‹จ์œ„"๊ฐ€ ์•„๋‹ˆ๋ผ "์ž๋ฆฌ ๋‹จ์œ„"๋กœ ์ˆœ์„œ๋ฅผ ์„ธ์–ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ˜„์žฌ ๋ช‡ ๋ฒˆ์งธ ์ˆœ์„œ์ธ์ง€๋ฅผ ์ถ”์ ํ•˜๋ฉด์„œ p๋ฒˆ์งธ ์ฐจ๋ก€์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ž๋ฅผ ์ฐพ์œผ๋ฉด ๋œ๋‹ค.

์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € ์ˆซ์ž i๋ฅผ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ํ•˜๋‚˜์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ, Integer.toString(i, n)์„ ์‚ฌ์šฉํ•ด n์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋Œ€๋ฌธ์ž๋กœ ํ†ต์ผํ–ˆ๋‹ค. ๋ณ€ํ™˜๋œ ๋ฌธ์ž์—ด์„ ํ•œ ๊ธ€์ž์”ฉ ์ˆœํšŒํ•˜๋ฉด์„œ, ํ˜„์žฌ ์ˆœ์„œ j๋ฅผ ๊ด€๋ฆฌํ–ˆ๋‹ค. j๊ฐ€ m๋ช…์„ ์ดˆ๊ณผํ•˜๋ฉด ๋‹ค์‹œ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋„๋ก ์ฒ˜๋ฆฌํ•˜์—ฌ ์ˆœํ™˜ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ทธ ํ›„ ํ˜„์žฌ ์ˆœ์„œ๊ฐ€ p์™€ ๊ฐ™์œผ๋ฉด ์ •๋‹ต ๋ฌธ์ž์—ด์— ์ถ”๊ฐ€ํ•˜๊ณ , ๋ช‡ ๊ฐœ๋ฅผ ๋ชจ์•˜๋Š”์ง€ cnt๋ฅผ ์„ธ์–ด ๋ชฉํ‘œ ๊ฐœ์ˆ˜ t์— ๋„๋‹ฌํ•˜๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•˜๋„๋ก ํ–ˆ๋‹ค.

์ด ๊ณผ์ •์„ ํ†ตํ•ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ n์ง„์ˆ˜ ๋ณ€ํ™˜ → ์ž๋ฆฌ ๋‹จ์œ„๋กœ ์ˆœ์„œ ์ถ”์  → ํŠน์ • ์‚ฌ๋žŒ์˜ ์ฐจ๋ก€๋งŒ ์ˆ˜์ง‘ → ์›ํ•˜๋Š” ๊ฐœ์ˆ˜๋งŒํผ ๋‹ต ์ƒ์„ฑ์ด๋ผ๋Š” ํ๋ฆ„์ž„์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ํ•„์š”ํ•œ ๋งŒํผ์˜ ์ˆซ์ž๋ฅผ ๋ณ€ํ™˜ํ•ด์„œ ํ™•์ธํ•˜๋Š” ๋‹จ์ˆœ ๋ฐ˜๋ณต ๊ตฌ์กฐ๋ผ์„œ, ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ์ž…๋ ฅ ๋ฒ”์œ„์—์„œ๋Š” ์ถฉ๋ถ„ํžˆ ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.