Programmers #38

์ด๊ฐ•์šฉยท2023๋…„ 9์›” 19์ผ

Programmers

๋ชฉ๋ก ๋ณด๊ธฐ
37/66

ํƒ€๊ฒŸ ๋„˜๋ฒ„

๐Ÿ“‘ ๋ฌธ1) n๊ฐœ์˜ ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ •์ˆ˜๋“ค์„ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ์ ์ ˆํžˆ ๋”ํ•˜๊ฑฐ๋‚˜ ๋นผ์„œ ํƒ€๊ฒŸ ๋„˜๋ฒ„๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด [1, 1, 1, 1, 1]๋กœ ์ˆซ์ž 3์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋‹ค์„ฏ ๋ฐฉ๋ฒ•์„ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3

์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด numbers, ํƒ€๊ฒŸ ๋„˜๋ฒ„ target์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ ์ˆซ์ž๋ฅผ ์ ์ ˆํžˆ ๋”ํ•˜๊ณ  ๋นผ์„œ ํƒ€๊ฒŸ ๋„˜๋ฒ„๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ

  • ์ฃผ์–ด์ง€๋Š” ์ˆซ์ž์˜ ๊ฐœ์ˆ˜๋Š” 2๊ฐœ ์ด์ƒ 20๊ฐœ ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๊ฐ ์ˆซ์ž๋Š” 1 ์ด์ƒ 50 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ํƒ€๊ฒŸ ๋„˜๋ฒ„๋Š” 1 ์ด์ƒ 1000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

numberstargetreturn
[1,1,1,1,1]35
[4,1,2,1]42

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

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

+4+1-2+1 = 4
+4-1+2-1 = 4
  • ์ด 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฏ€๋กœ, 2๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์˜ ํ’€์ด

package programmers;

import java.util.Arrays;

public class TargetNumber {
	
	private static int answer = 0;
	
	public static int solution(int[] numbers, int target) {
        answer = 0;
        char[] signs = new char[numbers.length];
        dfs(numbers, signs, 0, target);
        
        
        return answer;
    }
	
	public static void dfs(int[] numbers, char[] signs, int index, int target) {
		
		
		if (index == numbers.length) {
            int sum = 0;
            for (int i = 0; i < numbers.length; i++) {
            	
                if (signs[i] == '+') {
                    sum += numbers[i];
                } else {
                    sum -= numbers[i];
                }
            }

            if (sum == target) {
                answer++;  
            }
            
            return;
        }

        
        signs[index] = '+';
        dfs(numbers, signs, index + 1,target);

        signs[index] = '-';
        dfs(numbers, signs, index + 1,target);
       
	}
	
	
	
	
	public static void main(String[] args) {
		
		int[] numbers = {1,1,1,1,1};
		solution(numbers, 3);
	}
	
	

}

DFS๋ฅผ ์‚ฌ์šฉํ•œ ๋‹ค๋ฅธ ํ’€์ด

package programmers;

public class TargetNumber {
	
	private static int answer = 0;
	
	public static int solution(int[] numbers, int target) {
        answer = 0;
        
        dfs(numbers, target, 0, 0);
        
        return answer;
    }
	
	public static void dfs(int[] numbers, int target, int index, int sum) {
       
        if (index == numbers.length) {
           if(sum == target) {
        	   answer++;
           }
           return;
        }
		
        dfs(numbers, target, index + 1, sum + numbers[index]);
        dfs(numbers, target, index + 1, sum - numbers[index]);
       
    }
	
	
	
	
	public static void main(String[] args) {
		
		int[] numbers = {1,1,1,1,1};
		solution(numbers, 3);
	}
	
	

}


์ „ํ™”๋ฒˆํ˜ธ ๋ชฉ๋ก

๐Ÿ“‘ ๋ฌธ2) ์ „ํ™”๋ฒˆํ˜ธ๋ถ€์— ์ ํžŒ ์ „ํ™”๋ฒˆํ˜ธ ์ค‘, ํ•œ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ค๋ฅธ ๋ฒˆํ˜ธ์˜ ์ ‘๋‘์–ด์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.
์ „ํ™”๋ฒˆํ˜ธ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๊ฒฝ์šฐ, ๊ตฌ์กฐ๋Œ€ ์ „ํ™”๋ฒˆํ˜ธ๋Š” ์˜์„์ด์˜ ์ „ํ™”๋ฒˆํ˜ธ์˜ ์ ‘๋‘์‚ฌ์ž…๋‹ˆ๋‹ค.

  • ๊ตฌ์กฐ๋Œ€ : 119
  • ๋ฐ•์ค€์˜ : 97 674 223
  • ์ง€์˜์„ : 11 9552 4421

์ „ํ™”๋ฒˆํ˜ธ๋ถ€์— ์ ํžŒ ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด phone_book ์ด solution ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์–ด๋–ค ๋ฒˆํ˜ธ๊ฐ€ ๋‹ค๋ฅธ ๋ฒˆํ˜ธ์˜ ์ ‘๋‘์–ด์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋ฉด false๋ฅผ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด true๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.


์ œํ•œ ์‚ฌํ•ญ

  • phone_book์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 1,000,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
    • ๊ฐ ์ „ํ™”๋ฒˆํ˜ธ์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 20 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
    • ๊ฐ™์€ ์ „ํ™”๋ฒˆํ˜ธ๊ฐ€ ์ค‘๋ณตํ•ด์„œ ๋“ค์–ด์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

phone_bookreturn
["119", "97674223", "1195524421"]false
["123","456","789"]true
["12","123","1235","567","88"]false

๋‚˜์˜ ํ’€์ด

ํšจ์œจ์„ฑ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋กœ์ง

class Solution {
    public boolean solution(String[] phone_book) {
       boolean answer = true;
        
        for(int i = 0; i < phone_book.length - 1; i++) {
        	String phoneNumber = phone_book[i];
        	for (int j = i + 1; j < phone_book.length; j++) {
                if (phoneNumber.length() <= phone_book[j].length() 
                    && phone_book[j].substring(0, phoneNumber.length()).equals(phoneNumber)) {
                    answer = false;
                    
                }
                
                
                if (phoneNumber.length() > phone_book[j].length() 
                    && phoneNumber.substring(0, phone_book[j].length()).equals(phone_book[j])) {
                    answer = false;
                  
                }
            }
        	
        }
        
        return answer;
    }
}

package programmers;

import java.util.Arrays;

public class NumberList {
	
	public static boolean solution(String[] phone_book) {
        boolean answer = true;
        
        Arrays.sort(phone_book);
        
        for(int i = 0; i < phone_book.length - 1; i++) {
        	
            if(phone_book[i+1].startsWith(phone_book[i])) {
                answer = false;
            }
        }
        
 
        return answer;
    }
	
	
	public static void main(String[] args) {
		String[] phone_book = {"12", "88", "123", "567", "1235"};
		solution(phone_book);
	}

}

k์ง„์ˆ˜์—์„œ ์†Œ์ˆ˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ

๐Ÿ“‘ ๋ฌธ3) ์–‘์˜ ์ •์ˆ˜ n์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด ์ˆซ์ž๋ฅผ k์ง„์ˆ˜๋กœ ๋ฐ”๊ฟจ์„ ๋•Œ, ๋ณ€ํ™˜๋œ ์ˆ˜ ์•ˆ์— ์•„๋ž˜ ์กฐ๊ฑด์— ๋งž๋Š” ์†Œ์ˆ˜(Prime number)๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€ ์•Œ์•„๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค.

  • 0P0์ฒ˜๋Ÿผ ์†Œ์ˆ˜ ์–‘์ชฝ์— 0์ด ์žˆ๋Š” ๊ฒฝ์šฐ
  • P0์ฒ˜๋Ÿผ ์†Œ์ˆ˜ ์˜ค๋ฅธ์ชฝ์—๋งŒ 0์ด ์žˆ๊ณ  ์™ผ์ชฝ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ๊ฒฝ์šฐ
  • 0P์ฒ˜๋Ÿผ ์†Œ์ˆ˜ ์™ผ์ชฝ์—๋งŒ 0์ด ์žˆ๊ณ  ์˜ค๋ฅธ์ชฝ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ๊ฒฝ์šฐ
  • P์ฒ˜๋Ÿผ ์†Œ์ˆ˜ ์–‘์ชฝ์— ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ๊ฒฝ์šฐ
  • ๋‹จ, P๋Š” ๊ฐ ์ž๋ฆฟ์ˆ˜์— 0์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ์†Œ์ˆ˜์ž…๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, 101์€ P๊ฐ€ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 437674์„ 3์ง„์ˆ˜๋กœ ๋ฐ”๊พธ๋ฉด 211020101011์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด์— ๋งž๋Š” ์†Œ์ˆ˜๋Š” ์™ผ์ชฝ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ 211, 2, 11์ด ์žˆ์œผ๋ฉฐ, ์ด 3๊ฐœ์ž…๋‹ˆ๋‹ค. (211, 2, 11์„ k์ง„๋ฒ•์œผ๋กœ ๋ณด์•˜์„ ๋•Œ๊ฐ€ ์•„๋‹Œ, 10์ง„๋ฒ•์œผ๋กœ ๋ณด์•˜์„ ๋•Œ ์†Œ์ˆ˜์—ฌ์•ผ ํ•œ๋‹ค๋Š” ์ ์— ์ฃผ์˜ํ•ฉ๋‹ˆ๋‹ค.) 211์€ P0 ํ˜•ํƒœ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, 2๋Š” 0P0์—์„œ, 11์€ 0P์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •์ˆ˜ n๊ณผ k๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. n์„ k์ง„์ˆ˜๋กœ ๋ฐ”๊ฟจ์„ ๋•Œ, ๋ณ€ํ™˜๋œ ์ˆ˜ ์•ˆ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์œ„ ์กฐ๊ฑด์— ๋งž๋Š” ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ

  • 1 โ‰ค n โ‰ค 1,000,000
  • 3 โ‰ค k โ‰ค 10

์ž…์ถœ๋ ฅ ์˜ˆ

nkresult
43767433
110011102

๋‚˜์˜ ํ’€์ด

package programmers;

public class KPrimeNumber {
	
	public static int solution(int n, int k) {
        int answer = 0;
        
        
        StringBuilder nPrimeNumber = new StringBuilder();
        
        while(n > 0) {
        	int remainder = n % k ;
        	nPrimeNumber.insert(0, remainder);
        	n /= k;
        }
        
        
    	String[] str = nPrimeNumber.toString().split("0");
    	
    	
    	
    	for(String s : str) {
    		if(s.isEmpty() || s.equals("1")) {
    			continue;
    		}
    		long primeNumber = Long.parseLong(s);
    		boolean isPrime = true;
    		for(long j = 2; j*j <= primeNumber; j++) {
    			if(primeNumber % j == 0) {
    				isPrime = false;
    				break;
    			}
    		}
    		if(isPrime) {
    			answer++;
    		}
    		
    	}
    	
        
        return answer;
    }
	
	
	public static void main(String[] args) {
		
		
		solution(110011, 10);
	}

}

๋‚˜์˜ ์ƒ๊ฐ

๋งค๊ฐœ๋ณ€์ˆ˜ n์„ ๋จผ์ € n์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…์ด ๋จผ์ € ํ•„์š”ํ•˜๋‹ค.

StringBuilder nPrimeNumber = new StringBuilder();
        
while(n > 0) {
	int remainder = n % k ;
    nPrimeNumber.insert(0, remainder);
    n /= k;
}
๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ ์‚ดํŽด๋ณด๋ฉด

0P0
P0
0P
P

์ฆ‰ 0์„ ๊ธฐ์ค€์œผ๋กœ ์ž๋ฅด๋ฉด๋œ๋‹ค.

์—ฌ๊ธฐ์„œ 00 ์ด๋ ‡๊ฒŒ ๋‘๊ฐœ๊ฐ€ ์—ฐ์†์œผ๋กœ ๋‚˜์˜ค๋ฉด ๋ฌธ์ž์—ด์— ๋นˆ๊ฐ’์œผ๋กœ ๋“ค์–ด๊ฐ€๊ธฐ๋•Œ๋ฌธ์— ์ด๋ฅผ ๋‚˜์ค‘์— ์ฒดํฌํ•ด์ฃผ๋ฉด๋œ๋‹ค.

๋‚ด๊ฐ€ ์ƒ๊ฐํ–ˆ์„๋•Œ๋Š”, ๋นˆ๊ฐ’์œผ๋กœ ๋‚˜์˜จ ๋ถ€๋ถ„์€ ์–ด์ฐจํ”ผ 0์œผ๋กœ ์ชผ๊ฐœ์–ด ๋‚˜์˜จ ๊ฐ’์ด๊ธฐ๋•Œ๋ฌธ์— ์ด๋ฅผ ๊ทธ๋ƒฅ continue๋ฌธ์œผ๋กœ ๋ณด๋‚ด๋ฒ„๋ฆฌ๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

for(String s : str) {
	if(s.isEmpty() || s.equals("1")) {
    	continue;
    }
    long primeNumber = Long.parseLong(s);
    boolean isPrime = true;
    for(long j = 2; j*j <= primeNumber; j++) {
    	if(primeNumber % j == 0) {
        	isPrime = false;
            break;
        }
    }
    if(isPrime) {
    	answer++;
    }
    		
 }

for๋ฌธ์„ ์ˆœํšŒํ•˜๋ฉฐ s.isEmpty() ๋˜๋Š” s์˜ ๊ฐ’์ด "1"๊ณผ ๊ฐ™์œผ๋ฉด continue ์ •์ƒ์ ์ธ ๊ฐ’์ด ๋‚˜์˜ค๋ฉด ์ด๋ฅผ Long ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ ๋’ค ์†Œ์ˆ˜ ํŒ๋ณ„ ๋กœ์ง์„ ํ†ตํ•ด ์†Œ์ˆ˜๋ฅผ ํŒ๋ณ„ํ•œ๋‹ค.


์••์ถ•

๐Ÿ“‘ ๋ฌธ4) ์‹ ์ž…์‚ฌ์› ์–ดํ”ผ์น˜๋Š” ์นด์นด์˜คํ†ก์œผ๋กœ ์ „์†ก๋˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์••์ถ•ํ•˜์—ฌ ์ „์†ก ํšจ์œจ์„ ๋†’์ด๋Š” ์—…๋ฌด๋ฅผ ๋งก๊ฒŒ ๋˜์—ˆ๋‹ค. ๋ฉ”์‹œ์ง€๋ฅผ ์••์ถ•ํ•˜๋”๋ผ๋„ ์ „๋‹ฌ๋˜๋Š” ์ •๋ณด๊ฐ€ ๋ฐ”๋€Œ์–ด์„œ๋Š” ์•ˆ ๋˜๋ฏ€๋กœ, ์••์ถ• ์ „์˜ ์ •๋ณด๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ๋ณต์› ๊ฐ€๋Šฅํ•œ ๋ฌด์†์‹ค ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

์–ดํ”ผ์น˜๋Š” ์—ฌ๋Ÿฌ ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘์—์„œ ์„ฑ๋Šฅ์ด ์ข‹๊ณ  ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•œ LZW(Lempelโ€“Zivโ€“Welch) ์••์ถ•์„ ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. LZW ์••์ถ•์€ 1983๋…„ ๋ฐœํ‘œ๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ์ด๋ฏธ์ง€ ํŒŒ์ผ ํฌ๋งท์ธ GIF ๋“ฑ ๋‹ค์–‘ํ•œ ์‘์šฉ์—์„œ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค.

LZW ์••์ถ•์€ ๋‹ค์Œ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

  1. ๊ธธ์ด๊ฐ€ 1์ธ ๋ชจ๋“  ๋‹จ์–ด๋ฅผ ํฌํ•จํ•˜๋„๋ก ์‚ฌ์ „์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
  2. ์‚ฌ์ „์—์„œ ํ˜„์žฌ ์ž…๋ ฅ๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฐ€์žฅ ๊ธด ๋ฌธ์ž์—ด w๋ฅผ ์ฐพ๋Š”๋‹ค.
  3. w์— ํ•ด๋‹นํ•˜๋Š” ์‚ฌ์ „์˜ ์ƒ‰์ธ ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ์ž…๋ ฅ์—์„œ w๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.
  4. ์ž…๋ ฅ์—์„œ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ๋‹ค์Œ ๊ธ€์ž๊ฐ€ ๋‚จ์•„์žˆ๋‹ค๋ฉด(c), w+c์— ํ•ด๋‹นํ•˜๋Š” ๋‹จ์–ด๋ฅผ ์‚ฌ์ „์— ๋“ฑ๋กํ•œ๋‹ค.
  5. ๋‹จ๊ณ„ 2๋กœ ๋Œ์•„๊ฐ„๋‹ค.

์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์˜๋ฌธ ๋Œ€๋ฌธ์ž๋งŒ ์ฒ˜๋ฆฌํ•œ๋‹ค๊ณ  ํ•  ๋•Œ, ์‚ฌ์ „์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ดˆ๊ธฐํ™”๋œ๋‹ค. ์‚ฌ์ „์˜ ์ƒ‰์ธ ๋ฒˆํ˜ธ๋Š” ์ •์ˆ˜๊ฐ’์œผ๋กœ ์ฃผ์–ด์ง€๋ฉฐ, 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ํ•˜์ž.

์ƒ‰์ธ๋ฒˆํ˜ธ123...242526
๋‹จ์–ดABC...XYZ

์˜ˆ๋ฅผ ๋“ค์–ด ์ž…๋ ฅ์œผ๋กœ KAKAO๊ฐ€ ๋“ค์–ด์˜จ๋‹ค๊ณ  ํ•˜์ž.

  1. ํ˜„์žฌ ์‚ฌ์ „์—๋Š” KAKAO์˜ ์ฒซ ๊ธ€์ž K๋Š” ๋“ฑ๋ก๋˜์–ด ์žˆ์œผ๋‚˜, ๋‘ ๋ฒˆ์งธ ๊ธ€์ž๊นŒ์ง€์ธ KA๋Š” ์—†์œผ๋ฏ€๋กœ, ์ฒซ ๊ธ€์ž K์— ํ•ด๋‹นํ•˜๋Š” ์ƒ‰์ธ ๋ฒˆํ˜ธ 11์„ ์ถœ๋ ฅํ•˜๊ณ , ๋‹ค์Œ ๊ธ€์ž์ธ A๋ฅผ ํฌํ•จํ•œ KA๋ฅผ ์‚ฌ์ „์— 27 ๋ฒˆ์งธ๋กœ ๋“ฑ๋กํ•œ๋‹ค.
  2. ๋‘ ๋ฒˆ์งธ ๊ธ€์ž A๋Š” ์‚ฌ์ „์— ์žˆ์œผ๋‚˜, ์„ธ ๋ฒˆ์งธ ๊ธ€์ž๊นŒ์ง€์ธ AK๋Š” ์‚ฌ์ „์— ์—†์œผ๋ฏ€๋กœ, A์˜ ์ƒ‰์ธ ๋ฒˆํ˜ธ 1์„ ์ถœ๋ ฅํ•˜๊ณ , AK๋ฅผ ์‚ฌ์ „์— 28 ๋ฒˆ์งธ๋กœ ๋“ฑ๋กํ•œ๋‹ค.
  3. ์„ธ ๋ฒˆ์งธ ๊ธ€์ž์—์„œ ์‹œ์ž‘ํ•˜๋Š” KA๊ฐ€ ์‚ฌ์ „์— ์žˆ์œผ๋ฏ€๋กœ, KA์— ํ•ด๋‹นํ•˜๋Š” ์ƒ‰์ธ ๋ฒˆํ˜ธ 27์„ ์ถœ๋ ฅํ•˜๊ณ , ๋‹ค์Œ ๊ธ€์ž O๋ฅผ ํฌํ•จํ•œ KAO๋ฅผ 29 ๋ฒˆ์งธ๋กœ ๋“ฑ๋กํ•œ๋‹ค.
  4. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ๊ธ€์ž O์— ํ•ด๋‹นํ•˜๋Š” ์ƒ‰์ธ ๋ฒˆํ˜ธ 15๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
ํ˜„์žฌ ์ž…๋ ฅ(w)๋‹ค์Œ ๊ธ€์ž(c)์ถœ๋ ฅ์‚ฌ์ „ ์ถ”๊ฐ€(w+c)
KA1127:KA
AK128:AK
O15

์ด ๊ณผ์ •์„ ๊ฑฐ์ณ ๋‹ค์„ฏ ๊ธ€์ž์˜ ๋ฌธ์žฅ KAKAO๊ฐ€ 4๊ฐœ์˜ ์ƒ‰์ธ ๋ฒˆํ˜ธ [11, 1, 27, 15]๋กœ ์••์ถ•๋œ๋‹ค.

์ž…๋ ฅ์œผ๋กœ TOBEORNOTTOBEORTOBEORNOT๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์••์ถ•์ด ์ง„ํ–‰๋œ๋‹ค.

ํ˜„์žฌ ์ž…๋ ฅ(w)๋‹ค์Œ ๊ธ€์ž(c)์ถœ๋ ฅ์‚ฌ์ „ ์ถ”๊ฐ€(w+c)
TO2027:TO
OB1528:OB
BE229:BE
EO530:EO
OR1531:OR
RN1832:RN
NO1433:NO
OT1534:OT
TT2035:TT
TOB2736:TOB
BEO2937:BEO
ORT3138:ORT
TOBE3639:TOBE
EOR3040:EOR
RNO3241:RNO
OT34

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

msganswer
KAKAO[11, 1, 27, 15]
TOBEORNOTTOBEORTOBEORNOT[20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34]
ABABABABABABABAB[1, 2, 27, 29, 28, 31, 30]

๋‚˜์˜ ํ’€์ด

package programmers;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;

public class Compression {
	
	public static int[] solution(String msg) {
	
		LinkedHashMap<String, Integer> dictionary = new LinkedHashMap<>();
        List<Integer> result = new ArrayList<>();

        
        int index = 1;
        for (char ch = 'A'; ch <= 'Z'; ch++) {
        	dictionary.put(String.valueOf(ch), index++);
        }
        
        StringBuilder sb = new StringBuilder(msg);
        
        
        while(sb.length() > 0) {
        	int i ;
        	
        	for(i = 1; i <= sb.length(); i++) {
        		if(!dictionary.containsKey(sb.substring(0, i))) {
        			break;
        		}
        	}
        	
        	String found = sb.substring(0, i - 1);
        	
        	
        	
        	result.add(dictionary.get(found));
        	
        	if(i <= sb.length()) {
                dictionary.put(found + sb.charAt(i - 1), index++);
            }
            
            sb.delete(0, i - 1);
        	
        }
        
        
        
        int[] answer = new int[result.size()];
        for (int i = 0; i < result.size(); i++) {
            answer[i] = result.get(i);
        }
        
       
        return answer;
    }
	
	public static void main(String[] args) {
		
		solution("KAKAO");
	}

}


๋‚˜์˜ ์ƒ๊ฐ

LinkedHashMap<String, Integer> dictionary = new LinkedHashMap<>();
List<Integer> result = new ArrayList<>();

int index = 1;
for (char ch = 'A'; ch <= 'Z'; ch++) {
	dictionary.put(String.valueOf(ch), index++);
}

๋จผ์ € A-Z key ๊ฐ’์— 1~26 value๊ฐ’์œผ๋กœ dictionarymap์— ์ €์žฅํ•˜๋ฉด ๋œ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด๋ณด๋ฉด 
์‚ฌ์ „์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.

K (์‚ฌ์ „ ๋งต์— K๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ) 
A (์‚ฌ์ „ ๋งต์— A๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ)
KA (์‚ฌ์ „ ๋งต์— KA๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ) 
O (์‚ฌ์ „ ๋งต์— O๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ)

StringBuilder sb = new StringBuilder(msg);

  • ๋งค๊ฐœ๋ณ€์ˆ˜ msg ๊ฐ’์„ ์ถ”๊ฐ€, ์‚ญ์ œ๊ฐ€ ์‰ฝ๊ฒŒ StringBuilder๋ฅผ ์‚ฌ์šฉ

์ฃผ์š” ๋กœ์ง์„ ์‚ดํŽด๋ณด๋ฉด

while(sb.length() > 0) {
	int i ;
        	
    for(i = 1; i <= sb.length(); i++) {
    	if(!dictionary.containsKey(sb.substring(0, i))) {
        	break;
        }
    }
        	
    String found = sb.substring(0, i - 1);
    result.add(dictionary.get(found));
        	
    if(i <= sb.length()) {
    	dictionary.put(found + sb.charAt(i - 1), index++);
    }
            
    sb.delete(0, i - 1);
        	
}

dictionary Map์— ํ•œ๊ธ€์ž๋กœ ๋œ ๋ฌธ์ž K๋ฅผ ๋จผ์ € ์ฐพ๊ณ , ์‚ฌ์ „์— ์—†๋Š” ๋ฌธ์ž๊ฐ€ ๋‚˜์˜ค๋ฉด i์˜ ์œ„์น˜๋ฅผ ๊ธฐ์–ตํ•œ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ K๋ฅผ ๋ฆฌ์ŠคํŠธ answer์— key K์— ๋Œ€ํ•œ value ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.

if(i <= sb.length())์กฐ๊ฑด์€ ๋ฒ”์œ„ ์ดˆ๊ณผ ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ

์ด ์กฐ๊ฑด ์—†์ด sb.charAt(i - 1)์„ ํ˜ธ์ถœํ•˜๋ฉด, ๋งŒ์•ฝ i๊ฐ€ sb์˜ ๊ธธ์ด๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ ๋ฒ”์œ„์ดˆ๊ณผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, KA, AK, KAO๋ฅผ ์‚ฌ์ „์— ์ถ”๊ฐ€ํ•œ๋‹ค.

์ฆ‰, sb์— ๋“  ๋ฌธ์ž์— K,A,KA,O๋ฅผ ์ œ๊ฑฐ ํ•œ๋‹ค.


N์ง„์ˆ˜ ๊ฒŒ์ž„

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

  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๋กœ ์ถœ๋ ฅํ•œ๋‹ค.


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

ntmpresult
2421"0111"
161621"02468ACE11111111"
161622"13579BDF01234567"

๋‚˜์˜ ํ’€์ด

package programmers;

public class NBaseGame {
	
	public static String solution(int n, int t, int m, int p) {
		
		
		
		StringBuilder result = new StringBuilder();
		
		String chars = "0123456789ABCDEF";
		
		int number = 0;
		
		while(result.length() <  m * t){
			int currentNumber = number++;
			StringBuilder temp = new StringBuilder();
			
			
			do {
				temp.insert(0, chars.charAt(currentNumber % n));
				currentNumber /= n;
			}while(currentNumber > 0); 
			
			result.append(temp);
			
		}
		
		StringBuilder tubeResult = new StringBuilder();
		
		for(int i = 0; i < t; i++) {
			tubeResult.append(result.charAt(p - 1 + m * i));
		}
		
		System.out.println(tubeResult.toString());
        return tubeResult.toString();
    }
	
	
	public static void main(String[] args) {
		solution(16, 16, 2, 1);
	}

}

๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•œ ๋กœ์ง

package programmers;

public class NBaseGame {
	
	public static String solution(int n, int t, int m, int p) {
		
		StringBuilder sb = new StringBuilder();
		
		for(int i = 0; i <= t*m; i++) {
			sb.append(Integer.toString(i, n).toUpperCase());
		}
		
		StringBuilder result = new StringBuilder();
		
		for(int i = p - 1 , j = 0; j < t; i +=m, j++) {
			result.append(sb.charAt(i));
		}
		
		
		System.out.println(result.toString());
        return sb.toString();
    }
	
	
	public static void main(String[] args) {
		solution(16, 16, 2, 1);
	}

}


๋‚˜์˜ ์ƒ๊ฐ

๋งค๊ฐœ๋ณ€์ˆ˜ n์€ 2์—์„œ 16๊นŒ์ง€์˜ ์ˆ˜(์ง„๋ฒ•)์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ํ•œ ์‚ฌ๋žŒ์ด ๊ตฌํ•˜๋Š” ์ˆซ์ž์˜ ๊ฐœ์ˆ˜๊ฐ€ t, ์ฐธ๊ฐ€์ธ์›์ด m ์ด๊ธฐ๋•Œ๋ฌธ์—,

StringBuilder sb = new StringBuilder();
		
for(int i = 0; i <= t*m; i++) {
	sb.append(Integer.toString(i, n).toUpperCase());
}

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š”, Integer.toString()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, n์— ์ง„๋ฒ•์˜ ์ˆ˜๋ฅผ ๋„ฃ์œผ๋ฉด ์ˆซ์ž๋ฅผ ์ง„๋ฒ•์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด n = 16, t = 16, m = 2์ด๋ฉด 0 ~ 32 ๊นŒ์ง€์˜ ์ˆ˜๋ฅผ 16์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

์ฐธ๊ฐ€์ธ์› m, ์ˆœ์„œ p๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ˆ์ œ์˜ ๋ฌธ์ œ๋Š” ์ฐธ๊ฐ€์ธ์› 2๋ช…์ค‘, ์ฒซ๋ฒˆ์งธ ์ฐจ๋ก€์ด๊ธฐ๋•Œ๋ฌธ์—, ์ฒซ์นธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ํ•œ์นธ์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋‹ค์Œ ์นธ์„ ์ถ”๊ฐ€ํ•œ๋‹ค. ๋‹จ 10์ด์ƒ์˜ ์ˆ˜๋Š” 1,0์œผ๋กœ ๋‚˜๋ˆ„์–ด ์นธ์„ ์ถ”๊ฐ€ํ•œ๋‹ค. p๋Š” 1์ด์ƒ์˜ ์ˆ˜ ์ด๊ธฐ๋•Œ๋ฌธ์— i = 0 ๋ถ€ํ„ฐ +m(์ฐธ๊ฐ€์ธ์›์˜ ํฌ๊ธฐ) ๋งŒํผ ๋”ํ•˜์—ฌ result์— ์ €์žฅํ•œ๋‹ค.

int i = p - 1;
for(int j = 0; j < t; j++) {
	result.append(sb.charAt(i));
    i += m;
}

for๋ฌธ ๊ตฌํ˜„while๋ฌธ ๊ตฌํ˜„

0๊ฐœ์˜ ๋Œ“๊ธ€