Programmers #27

์ด๊ฐ•์šฉยท2023๋…„ 7์›” 16์ผ
0

Programmers

๋ชฉ๋ก ๋ณด๊ธฐ
26/58

K๋ฒˆ์งธ์ˆ˜

๐Ÿ“‘ ๋ฌธ1) ๋ฐฐ์—ด array์˜ i๋ฒˆ์งธ ์ˆซ์ž๋ถ€ํ„ฐ j๋ฒˆ์งธ ์ˆซ์ž๊นŒ์ง€ ์ž๋ฅด๊ณ  ์ •๋ ฌํ–ˆ์„ ๋•Œ, k๋ฒˆ์งธ์— ์žˆ๋Š” ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด array๊ฐ€ [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3์ด๋ผ๋ฉด

  • array์˜ 2๋ฒˆ์งธ๋ถ€ํ„ฐ 5๋ฒˆ์งธ๊นŒ์ง€ ์ž๋ฅด๋ฉด [5, 2, 6, 3]์ž…๋‹ˆ๋‹ค.
  • 1์—์„œ ๋‚˜์˜จ ๋ฐฐ์—ด์„ ์ •๋ ฌํ•˜๋ฉด [2, 3, 5, 6]์ž…๋‹ˆ๋‹ค.
  • 2์—์„œ ๋‚˜์˜จ ๋ฐฐ์—ด์˜ 3๋ฒˆ์งธ ์ˆซ์ž๋Š” 5์ž…๋‹ˆ๋‹ค.

๋ฐฐ์—ด array, [i, j, k]๋ฅผ ์›์†Œ๋กœ ๊ฐ€์ง„ 2์ฐจ์› ๋ฐฐ์—ด commands๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, commands์˜ ๋ชจ๋“  ์›์†Œ์— ๋Œ€ํ•ด ์•ž์„œ ์„ค๋ช…ํ•œ ์—ฐ์‚ฐ์„ ์ ์šฉํ–ˆ์„ ๋•Œ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ

  • array์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 100 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • array์˜ ๊ฐ ์›์†Œ๋Š” 1 ์ด์ƒ 100 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • commands์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 50 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • commands์˜ ๊ฐ ์›์†Œ๋Š” ๊ธธ์ด๊ฐ€ 3์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

arraycommandsreturn
[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]][5, 6, 3]

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

  • [1, 5, 2, 6, 3, 7, 4]๋ฅผ 2๋ฒˆ์งธ๋ถ€ํ„ฐ 5๋ฒˆ์งธ๊นŒ์ง€ ์ž๋ฅธ ํ›„ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. [2, 3, 5, 6]์˜ ์„ธ ๋ฒˆ์งธ ์ˆซ์ž๋Š” 5์ž…๋‹ˆ๋‹ค.
  • [1, 5, 2, 6, 3, 7, 4]๋ฅผ 4๋ฒˆ์งธ๋ถ€ํ„ฐ 4๋ฒˆ์งธ๊นŒ์ง€ ์ž๋ฅธ ํ›„ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. [6]์˜ ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋Š” 6์ž…๋‹ˆ๋‹ค.
  • [1, 5, 2, 6, 3, 7, 4]๋ฅผ 1๋ฒˆ์งธ๋ถ€ํ„ฐ 7๋ฒˆ์งธ๊นŒ์ง€ ์ž๋ฆ…๋‹ˆ๋‹ค. [1, 2, 3, 4, 5, 6, 7]์˜ ์„ธ ๋ฒˆ์งธ ์ˆซ์ž๋Š” 3์ž…๋‹ˆ๋‹ค.

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

package programmers;

import java.util.Arrays;

public class KthNumber {
	
	public static int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
        
        
        for(int i = 0; i < commands.length; i++) {
        	int[] temp = Arrays.copyOfRange(array, commands[i][0] - 1, commands[i][1]);
        	Arrays.sort(temp);
        	answer[i] = temp[commands[i][2] - 1];
        }
  
        return answer;
    }
	
	public static void main(String[] args) {
		
		solution(new int[] {1,5,2,6,3,7,4}, new int[][] {{2,5,3},{4,4,1},{1,7,3}});
	
	}

}

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

๊ธฐ์กด ๋ฐฐ์—ด(์› ๋ฐฐ์—ด)์€ ๋†”๋‘๋ฉด์„œ, ๊ธฐ์กด ๋ฐฐ์—ด์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•œ int[] temp ์„ ์–ธํ•˜์—ฌ, Arrays.copyOfRange()๋ฅผ ํ†ตํ•ด ๋ฐฐ์—ด์˜ ํŠน์ • ์ธ๋ฑ์Šค(์‹œ์ž‘ ~ ๋)์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด, ๋งค๊ฐœ๋ณ€์ˆ˜ commands[1] = {2,5,3}์ผ ๋•Œ, ์‹œ์ž‘ index 2, ๋ index 5๋ผ๊ณ ํ•˜๋ฉด, {1,5,2,6,3,7,4}์—์„œ 5,2,6,3์— ํ•ด๋‹นํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, Arrays.copyOfRange()์˜ ๋ฒ”์œ„๋ฅผ commands[i][0] - 1 ~ commands[i][1]๋กœ ์žก๋Š”๋ฐ commands[i][0] - 1์„ ํ•˜๋Š” ์ด์œ ๋Š” ์ž๋ฐ”์˜ ๋ฐฐ์—ด index๊ฐ€ 0๋ฒˆ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ๋กœ์ง์„ Arrays.sort(temp)๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ •๋ ฌ๋œ{2,3,5} ์—์„œ 3๋ฒˆ์งธ index -> 5์„ anwer[i] ์— ์ €์žฅํ•œ๋‹ค. ๋‚˜๋จธ์ง€ ๋ฐ˜๋ณต์„ ์ˆ˜ํ–‰ํ•œ ์ตœ์ข…๊ฒฐ๊ณผ {5,6,3}์ด return ๋œ๋‹ค.


๋‘ ๊ฐœ ๋ฝ‘์•„์„œ ๋”ํ•˜๊ธฐ

๐Ÿ“‘ ๋ฌธ2) ์ •์ˆ˜ ๋ฐฐ์—ด numbers๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. numbers์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ๋‘ ๊ฐœ์˜ ์ˆ˜๋ฅผ ๋ฝ‘์•„ ๋”ํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ˆ˜๋ฅผ ๋ฐฐ์—ด์— ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ

  • numbers์˜ ๊ธธ์ด๋Š” 2 ์ด์ƒ 100 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
    • numbers์˜ ๋ชจ๋“  ์ˆ˜๋Š” 0 ์ด์ƒ 100 ์ดํ•˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

numbersresult
[2,1,3,4,1][2,3,4,5,6,7]
5,0,2,72,5,7,9,12

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

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

  • 2 = 1 + 1 ์ž…๋‹ˆ๋‹ค. (1์ด numbers์— ๋‘ ๊ฐœ ์žˆ์Šต๋‹ˆ๋‹ค.)
  • 3 = 2 + 1 ์ž…๋‹ˆ๋‹ค.
  • 4 = 1 + 3 ์ž…๋‹ˆ๋‹ค.
  • 5 = 1 + 4 = 2 + 3 ์ž…๋‹ˆ๋‹ค.
  • 6 = 2 + 4 ์ž…๋‹ˆ๋‹ค.
  • 7 = 3 + 4 ์ž…๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ [2,3,4,5,6,7] ์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

  • 2 = 0 + 2 ์ž…๋‹ˆ๋‹ค.
  • 5 = 5 + 0 ์ž…๋‹ˆ๋‹ค.
  • 7 = 0 + 7 = 5 + 2 ์ž…๋‹ˆ๋‹ค.
  • 9 = 2 + 7 ์ž…๋‹ˆ๋‹ค.
  • 12 = 5 + 7 ์ž…๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ [2,5,7,9,12] ๋ฅผ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

package programmers;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class PickTwoAndAddThem {
	 public static int[] solution(int[] numbers) {
	        
	        Set<Integer> entrySet = new HashSet<>();
	        
	        for(int i = numbers.length -1 ; i >= 0; i--) {
	        	int start = numbers.length - i - 1;	    
	        	for(int j = start + 1; j < numbers.length; j++) {
	        		int temp = numbers[start] + numbers[j];
	        		
	        		entrySet.add(temp);
	        		
	        		
	        	}
	        }
	        int[] answer = new int[entrySet.size()];
	        
	      
	        int cnt = 0;
	        for(Integer a : entrySet) {
	        
	        	answer[cnt++] = a;
	        }
	        Arrays.sort(answer);
	        
	        return answer;
	 }
	 
	 public static void main(String[] args) {
		solution(new int[]{5,0,2,7});
	}
}

ํด๋ฆฐ ์ฝ”๋“œ๋กœ ์ž‘์„ฑ

package programmers;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class PickTwoAndAddThem {
	 public static int[] solution(int[] numbers) {
	        
		 Set<Integer> sumSet = new HashSet<>();
	        
	        for(int i = 0; i < numbers.length; i++) {
	            for(int j = i + 1; j < numbers.length; j++) {
	                sumSet.add(numbers[i] + numbers[j]);
	            }
	        }
	        int[] answer = new int[sumSet.size()];
	        
	      
	        int cnt = 0;
	        for(Integer a : sumSet) {
	        
	        	answer[cnt++] = a;
	        }
	        Arrays.sort(answer);
	        
	        return answer;
	 }
	 
	 public static void main(String[] args) {
		solution(new int[]{5,0,2,7});
	}
}

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

๋‚˜์˜ ์ฝ”๋“œํด๋ฆฐ ์ฝ”๋“œ ์ž‘์„ฑ

๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ํ•ต์‹ฌ์ฝ”๋“œ์ธ๋ฐ, ๋ฐ˜๋ณต๋ฌธ ์ „์ฒด๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ, ๊ฐ index๋ฅผ ๋”ํ•˜๋Š” ๋กœ์ง์ด ์ƒ๊ฐ์ด ๋‚˜์ง€์•Š์•„, ์˜์‹์˜ ํ๋ฆ„๋Œ€๋กœ ์‹์„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ํด๋ฆฐ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, index๋ฅผ 0๋ถ€ํ„ฐํ•˜์—ฌ, ์ด์ค‘ for๋ฌธ์˜ ์•ˆ์ชฝ int j = i + 1 ์„ ํ•˜๋ฉด, ์ž์—ฐ์Šค๋ ˆ ๋ชจ๋“  index์˜ ๋ชจ๋“  ๊ฐ’์„ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  set ์ปฌ๋ ‰์…˜์€ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€์•Š๊ธฐ๋•Œ๋ฌธ์—, set ์ปฌ๋ ‰์…˜์„ ์ด์šฉํ•˜์—ฌ, ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ ๊ฐ’๋“ค์„ ์ €์žฅํ•  ์ˆ˜์žˆ๋‹ค. ์ตœ์ข…์ ์œผ๋กœ, sumSet์— ํฌํ•จ๋œ ๊ฐ’๋“ค์„ ํ•˜๋‚˜์”ฉ int[]ํ˜• ๋ฐฐ์—ด์— ์ €์žฅํ•˜์—ฌ ๋ฆฌํ„ดํ•œ๋‹ค.


ํ‘ธ๋“œ ํŒŒ์ดํŠธ ๋Œ€ํšŒ

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

์ด๋•Œ, ๋Œ€ํšŒ์˜ ๊ณต์ •์„ฑ์„ ์œ„ํ•ด ๋‘ ์„ ์ˆ˜๊ฐ€ ๋จน๋Š” ์Œ์‹์˜ ์ข…๋ฅ˜์™€ ์–‘์ด ๊ฐ™์•„์•ผ ํ•˜๋ฉฐ, ์Œ์‹์„ ๋จน๋Š” ์ˆœ์„œ๋„ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ด๋ฒˆ ๋Œ€ํšŒ๋ถ€ํ„ฐ๋Š” ์นผ๋กœ๋ฆฌ๊ฐ€ ๋‚ฎ์€ ์Œ์‹์„ ๋จผ์ € ๋จน์„ ์ˆ˜ ์žˆ๊ฒŒ ๋ฐฐ์น˜ํ•˜์—ฌ ์„ ์ˆ˜๋“ค์ด ์Œ์‹์„ ๋” ์ž˜ ๋จน์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๋Œ€ํšŒ๋ฅผ ์œ„ํ•ด ์ˆ˜์›…์ด๋Š” ์Œ์‹์„ ์ฃผ๋ฌธํ–ˆ๋Š”๋ฐ, ๋Œ€ํšŒ์˜ ์กฐ๊ฑด์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ์Œ์‹์„ ์ฃผ๋ฌธํ•˜์—ฌ ๋ช‡ ๊ฐœ์˜ ์Œ์‹์€ ๋Œ€ํšŒ์— ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 3๊ฐ€์ง€์˜ ์Œ์‹์ด ์ค€๋น„๋˜์–ด ์žˆ์œผ๋ฉฐ, ์นผ๋กœ๋ฆฌ๊ฐ€ ์ ์€ ์ˆœ์„œ๋Œ€๋กœ 1๋ฒˆ ์Œ์‹์„ 3๊ฐœ, 2๋ฒˆ ์Œ์‹์„ 4๊ฐœ, 3๋ฒˆ ์Œ์‹์„ 6๊ฐœ ์ค€๋น„ํ–ˆ์œผ๋ฉฐ, ๋ฌผ์„ ํŽธ์˜์ƒ 0๋ฒˆ ์Œ์‹์ด๋ผ๊ณ  ์นญํ•œ๋‹ค๋ฉด, ๋‘ ์„ ์ˆ˜๋Š” 1๋ฒˆ ์Œ์‹ 1๊ฐœ, 2๋ฒˆ ์Œ์‹ 2๊ฐœ, 3๋ฒˆ ์Œ์‹ 3๊ฐœ์”ฉ์„ ๋จน๊ฒŒ ๋˜๋ฏ€๋กœ ์Œ์‹์˜ ๋ฐฐ์น˜๋Š” "1223330333221"์ด ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 1๋ฒˆ ์Œ์‹ 1๊ฐœ๋Š” ๋Œ€ํšŒ์— ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜์›…์ด๊ฐ€ ์ค€๋น„ํ•œ ์Œ์‹์˜ ์–‘์„ ์นผ๋กœ๋ฆฌ๊ฐ€ ์ ์€ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด food๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋Œ€ํšŒ๋ฅผ ์œ„ํ•œ ์Œ์‹์˜ ๋ฐฐ์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด์„ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ

  • 2 โ‰ค food์˜ ๊ธธ์ด โ‰ค 9
  • 1 โ‰ค food์˜ ๊ฐ ์›์†Œ โ‰ค 1,000
  • food์—๋Š” ์นผ๋กœ๋ฆฌ๊ฐ€ ์ ์€ ์ˆœ์„œ๋Œ€๋กœ ์Œ์‹์˜ ์–‘์ด ๋‹ด๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค.
  • food[i]๋Š” i๋ฒˆ ์Œ์‹์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • food[0]์€ ์ˆ˜์›…์ด๊ฐ€ ์ค€๋น„ํ•œ ๋ฌผ์˜ ์–‘์ด๋ฉฐ, ํ•ญ์ƒ 1์ž…๋‹ˆ๋‹ค.
  • ์ •๋‹ต์˜ ๊ธธ์ด๊ฐ€ 3 ์ด์ƒ์ธ ๊ฒฝ์šฐ๋งŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

foodresult
[1,3,4,6]1223330333221
[1,7,1,2]111303111

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

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

  • ๋ฌธ์ œ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

  • ๋‘ ์„ ์ˆ˜๋Š” 1๋ฒˆ ์Œ์‹ 3๊ฐœ, 3๋ฒˆ ์Œ์‹ 1๊ฐœ๋ฅผ ๋จน๊ฒŒ ๋˜๋ฏ€๋กœ ์Œ์‹์˜ ๋ฐฐ์น˜๋Š” 111303111 ์ž…๋‹ˆ๋‹ค.

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

package programmers;

public class FoodFight {
	 public static String solution(int[] food) {
	        String answer = "";
	        
	        for(int i = 1; i < food.length; i++) {
	        	int cnt = food[i] / 2 ;
	        	for(int j = 1; j <= cnt; j++) {
	        		answer += i;
	        	}
	        }
	        String reverse = new StringBuilder(answer).reverse().toString();
	        answer += 0 ;
	        answer +=reverse;
	        
	       
	        return answer;
	 }
	 
	 public static void main(String[] args) {
		solution(new int[] {1,3,4,6});
	}

}

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

๋งค๊ฒจ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง€๋Š” food[0]์€ ๋ฌด์กฐ๊ฑด 1๋กœ ๊ณ ์ •๋˜๊ณ , index 1๋ถ€ํ„ฐ ๋‚˜์˜ค๋Š” ์ˆ˜๋ฅผ ๋ฐ˜์œผ๋กœ ์ชผ๊ฐœ์–ด ๋‚˜๋ˆˆ ๋ชซ์„ cnt ๋ณ€์ˆ˜์— ๋„ฃ๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  for๋ฌธ ๋ฐ˜๋ณต์„ ํ†ตํ•ด, 1๋ถ€ํ„ฐ cnt๊นŒ์ง€ ์ˆœํšŒ๋ฅผ ๋Œ๋ฉฐ, answer์— i๊ฐ’์„ ๋”ํ•ด์ค€๋‹ค. ์ด๋•Œ answer์€ String ํƒ€์ž…์ด๊ธฐ๋•Œ๋ฌธ์—, 122333์ด ์ฐํžˆ๊ฒŒ ๋˜๊ณ , String reverse์—๋Š” StringBuilder์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ, reverse() ๋ฉ”์„œ๋“œ์™€ toString() ์„ ํ™œ์šฉํ•˜์—ฌ, 122333 -> 333221 ์—ญ์ˆœํ•˜์—ฌ ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, answer += i, answer += 0, answer += reverse ; ๋ฅผ ํ•˜๋ฉด 1223330333221์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ฒŒ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์€ reverse ๋ฉ”์„œ๋“œ์˜ ์‹œ๊ฐ„๋ณต์žก๋„ O(n)์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์ž…๋ ฅ ํฌ๊ธฐ(๋ฌธ์ž์—ด์˜ ๊ธธ์ด)์— ๋น„๋ก€ํ•˜๋Š” ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๊ธฐ๋•Œ๋ฌธ์—, ์ƒ๋‹นํ•œ ์‹œ๊ฐ„์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ๋‹ค.


์ถ”๊ฐ€๋กœ ์ƒ๊ฐํ•œ ๋ฐฉ๋ฒ•

package programmers;

public class FoodFight {
	 public static String solution(int[] food) {
	        StringBuilder front = new StringBuilder();
	        StringBuilder back = new StringBuilder();
	        
	        for(int i = 1; i < food.length; i++){
	        	int cnt = food[i] / 2;
	        	for(int j = 1; j <= cnt; j++) {
	        		front.append(i);
	        		back.insert(0, i);
	        	}
	        }
	        
	        front.append('0').append(back);
	        
	        
	        System.out.println(front.toString());
	        return front.toString();
	 }
	 
	 public static void main(String[] args) {
		solution(new int[] {1,3,4,6});
	}

}

๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์˜ ์‹œ๊ฐ„ ๋น„๊ต

๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๋กœ์ง์ถ”๊ฐ€๋กœ ์ƒ๊ฐํ•œ ๋กœ์ง

์ด ๋ฐฉ๋ฒ•์€ StringBuilder์˜ insert() ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค๋ฉด์„œ ๋™์‹œ์— ๋’ค์ง‘์€ ๋ฌธ์ž์—ด๋„ ๋งŒ๋“ค์–ด๋‚˜๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— (back.insert(0,i), ๋ณ„๋„์˜ ๋’ค์ง‘๊ธฐ ์—ฐ์‚ฐ์ด ํ•„์š” ์—†์œผ๋ฏ€๋กœ ํšจ์œจ์ ์ด๋‹ค.


๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฐ™์€ ๊ธ€์ž

๐Ÿ“‘ ๋ฌธ4) ๋ฌธ์ž์—ด s๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, s์˜ ๊ฐ ์œ„์น˜๋งˆ๋‹ค ์ž์‹ ๋ณด๋‹ค ์•ž์— ๋‚˜์™”์œผ๋ฉด์„œ, ์ž์‹ ๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณณ์— ์žˆ๋Š” ๊ฐ™์€ ๊ธ€์ž๊ฐ€ ์–ด๋”” ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, s="banana"๋ผ๊ณ  ํ•  ๋•Œ, ๊ฐ ๊ธ€์ž๋“ค์„ ์™ผ์ชฝ๋ถ€ํ„ฐ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ฝ์–ด ๋‚˜๊ฐ€๋ฉด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • b๋Š” ์ฒ˜์Œ ๋‚˜์™”๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹ ์˜ ์•ž์— ๊ฐ™์€ ๊ธ€์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” -1๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • a๋Š” ์ฒ˜์Œ ๋‚˜์™”๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹ ์˜ ์•ž์— ๊ฐ™์€ ๊ธ€์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” -1๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • n์€ ์ฒ˜์Œ ๋‚˜์™”๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹ ์˜ ์•ž์— ๊ฐ™์€ ๊ธ€์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” -1๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • a๋Š” ์ž์‹ ๋ณด๋‹ค ๋‘ ์นธ ์•ž์— a๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” 2๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • n๋„ ์ž์‹ ๋ณด๋‹ค ๋‘ ์นธ ์•ž์— n์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” 2๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • a๋Š” ์ž์‹ ๋ณด๋‹ค ๋‘ ์นธ, ๋„ค ์นธ ์•ž์— a๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘ ๊ฐ€๊นŒ์šด ๊ฒƒ์€ ๋‘ ์นธ ์•ž์ด๊ณ , ์ด๋Š” 2๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ์€ [-1, -1, -1, 2, 2, 2]๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
๋ฌธ์ž์—ด s์ด ์ฃผ์–ด์งˆ ๋•Œ, ์œ„์™€ ๊ฐ™์ด ์ •์˜๋œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜ solution์„ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ

  • 1 โ‰ค s์˜ ๊ธธ์ด โ‰ค 10,000
    • s์€ ์˜์–ด ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

sresult
"banana"[-1,-1,-1,2,2,2]
"foobar"[-1,-1,1,-1,-1,-1]

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

import java.util.*;
class Solution {
    public int[] solution(String s) {
       int[] result = new int[s.length()];
        int[] lastPosition = new int[26];

        Arrays.fill(lastPosition, -1);

        for(int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);

            if(lastPosition[ch - 'a'] == -1) {
                result[i] = -1;
            }else {

                result[i] = i - lastPosition[ch -'a'];
            }

            lastPosition[ch -'a'] = i;
        }


        return result;
    }
}

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

์ด ๋ฌธ์ œ์˜ ์ค‘์ ์€ ์ค‘๋ณต๋œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ธ€์ž๋ฅผ ์–ด๋–ป๊ฒŒ ์ฐพ์„ ๊ฒƒ์ธ๊ฐ€?๊ฐ€ ํ•ต์‹ฌ์ด์˜€๋˜๊ฑฐ๊ฐ™๋‹ค. ์†Œ๋ฌธ์ž ์•ŒํŒŒ๋ฒณ์˜ ๊ฐฏ์ˆ˜๋ฅผ ํฌ๊ธฐ๋กœ ๊ฐ–๋Š” ์•ŒํŒŒ๋ฒณ ๋ฌธ์ž์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜๋ฅผ ์ถ”์ ํ•˜๋Š” int[] lastPosition ๋ฐฐ์—ด์˜ ์ƒ์„ฑ๊ณผ ๋™์‹œ ํฌ๊ธฐ๋ฅผ ํ• ๋‹นํ•˜๋ฉฐ, ์ด๋•Œ ๋ชจ๋“  ๊ฐ’์„ -1๋กœ ์ฑ„์šด๋‹ค. ์ด๋•Œ ๋ฐฐ์—ด์˜ index๋Š” ์•ŒํŒŒ๋ฒณ ๋ฌธ์ž๋ฅผ 'a'๋กœ๋ถ€ํ„ฐ์˜ ๊ฑฐ๋ฆฌ๋กœ ๊ณ„์‚ฐํ•˜๋ฉฐ, ch - 'a'๋กœ ํŠน์ • ๋ฌธ์ž์— ๋Œ€ํ•œ index๋ฅผ ์–ป๋Š”๋‹ค.
lastPosition[ch - 'a']๋Š” ํŠน์ • ๋ฌธ์ž ch์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, -1์ด๋ผ๋ฉด, ch๊ฐ€ ์•„์ง ๋ฌธ์ž์—ด์—์„œ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์•˜์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, lastPosition[ch -'a']๊ฐ€ -1์ด ์•„๋‹Œ ๊ฒฝ์šฐ, ์ฆ‰ ch๊ฐ€ ๋ฌธ์ž์—ด์—์„œ ์ด๋ฏธ ๋“ฑ์žฅํ–ˆ์œผ๋ฉด, ch์˜ ํ˜„์žฌ ์œ„์น˜(i)์™€ ์ด์ „ ์œ„์น˜ (lastPosition[ch - 'a'])์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ result[i]์— ์ €์žฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฌธ์žch์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜๋ฅผ ํ˜„์žฌ ์œ„์น˜ i๋กœ ์—…๋ฐ์ดํŠธํ•จ. ์ด๊ฒƒ์€ ๋‹ค์Œ ๋ฒˆ์— ch๊ฐ€ ๋‚˜ํƒ€๋‚  ๋•Œ ๊ทธ ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋ฐ ์‚ฌ์šฉ๋จ


๋‹ค๋ฅธ ๋ฐฉ๋ฒ•

package programmers;

import java.util.HashMap;
import java.util.Map;

public class NearestEqualNumber {
	
	public static int[] solution(String s) {
		
       int[] answer = new int[s.length()];
       Map<Character, Integer> map = new HashMap<>();
       
       for(int i = 0; i < s.length(); i++){
    	   char ch = s.charAt(i);
    	   answer[i] = i - map.getOrDefault(ch, i+1);
    	   map.put(ch,i);
       }
       return answer;
    }
	
	public static void main(String[] args) {
		solution("banana");
	}

}

์ฒซ ๋ฒˆ์งธ ๋กœ์ง๊ณผ ๋‘ ๋ฒˆ์งธ ๋กœ์ง์˜ ์ฐจ์ด

๋‘๋ฒˆ์งธ ๋กœ์ง์€ Map์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ, key์˜ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ณ , map.getOrDefault()๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ, ch์˜ ๋งˆ์ง€๋ง‰ ๋“ฑ์žฅ ์œ„์น˜๋ฅผ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ, ๋งŒ์•ฝ ch๊ฐ€ ์•„์ง map์— ์—†๋‹ค๋ฉด i + 1 ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.answer[i] = i - map.getOrDefault(ch, i+1)๋ฅผ ์ด์šฉํ•˜์—ฌ ํ˜„์žฌ index i์™€ ๋งˆ์ง€๋ง‰ ๋“ฑ์žฅ ์œ„์น˜์˜ ์ฐจ๋ฅผ answer[i]์— ์ €์žฅ. ์ด๋Š” ํ˜„์žฌ ๋ฌธ์ž์™€ ์ด์ „์— ๋‚˜ํƒ€๋‚œ ๋™์ผ ๋ฌธ์ž ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ํƒ€๋‚˜๋ƒ„. ๊ทธ๋ฆฌ๊ณ  map.put(ch,i)๋ฅผ ์ด์šฉํ•˜์—ฌ ch์˜ ๋งˆ์ง€๋ง‰ ๋“ฑ์žฅ ์œ„์น˜๋ฅผ ํ˜„์žฌ index i๋กœ ์—…๋ฐ์ดํŠธํ•จ


์ฝœ๋ผ ๋ฌธ์ œ

๐Ÿ“‘ ๋ฌธ5) ์˜ค๋ž˜์ „ ์œ ํ–‰ํ–ˆ๋˜ ์ฝœ๋ผ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝœ๋ผ ๋ฌธ์ œ์˜ ์ง€๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ •๋‹ต์€ ์•„๋ฌด์—๊ฒŒ๋„ ๋งํ•˜์ง€ ๋งˆ์„ธ์š”.

์ฝœ๋ผ ๋นˆ ๋ณ‘ 2๊ฐœ๋ฅผ ๊ฐ€์ ธ๋‹ค์ฃผ๋ฉด ์ฝœ๋ผ 1๋ณ‘์„ ์ฃผ๋Š” ๋งˆํŠธ๊ฐ€ ์žˆ๋‹ค. ๋นˆ ๋ณ‘ 20๊ฐœ๋ฅผ ๊ฐ€์ ธ๋‹ค์ฃผ๋ฉด ๋ช‡ ๋ณ‘์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”๊ฐ€?

๋‹จ, ๋ณด์œ  ์ค‘์ธ ๋นˆ ๋ณ‘์ด 2๊ฐœ ๋ฏธ๋งŒ์ด๋ฉด, ์ฝœ๋ผ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์—†๋‹ค.

๋ฌธ์ œ๋ฅผ ํ’€๋˜ ์ƒ๋นˆ์ด๋Š” ์ฝœ๋ผ ๋ฌธ์ œ์˜ ์™„๋ฒฝํ•œ ํ•ด๋‹ต์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์ƒ๋นˆ์ด๊ฐ€ ํ‘ผ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ์„  ์ฝœ๋ผ ๋นˆ ๋ณ‘ 20๋ณ‘์„ ๊ฐ€์ ธ๊ฐ€์„œ 10๋ณ‘์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋ฐ›์€ 10๋ณ‘์„ ๋ชจ๋‘ ๋งˆ์‹  ๋’ค, ๊ฐ€์ ธ๊ฐ€์„œ 5๋ณ‘์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. 5๋ณ‘ ์ค‘ 4๋ณ‘์„ ๋ชจ๋‘ ๋งˆ์‹  ๋’ค ๊ฐ€์ ธ๊ฐ€์„œ 2๋ณ‘์„ ๋ฐ›๊ณ , ๋˜ 2๋ณ‘์„ ๋ชจ๋‘ ๋งˆ์‹  ๋’ค ๊ฐ€์ ธ๊ฐ€์„œ 1๋ณ‘์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋ฐ›์€ 1๋ณ‘๊ณผ 5๋ณ‘์„ ๋ฐ›์•˜์„ ๋•Œ ๋‚จ์€ 1๋ณ‘์„ ๋ชจ๋‘ ๋งˆ์‹  ๋’ค ๊ฐ€์ ธ๊ฐ€๋ฉด 1๋ณ‘์„ ๋˜ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ƒ๋นˆ์ด๋Š” ์ด 10 + 5 + 2 + 1 + 1 = 19๋ณ‘์˜ ์ฝœ๋ผ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ์—ด์‹ฌํžˆ ํ’€๋˜ ์ƒ๋นˆ์ด๋Š” ์ผ๋ฐ˜ํ™”๋œ ์ฝœ๋ผ ๋ฌธ์ œ๋ฅผ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ๋นˆ ๋ณ‘ a๊ฐœ๋ฅผ ๊ฐ€์ ธ๋‹ค์ฃผ๋ฉด ์ฝœ๋ผ b๋ณ‘์„ ์ฃผ๋Š” ๋งˆํŠธ๊ฐ€ ์žˆ์„ ๋•Œ, ๋นˆ ๋ณ‘ n๊ฐœ๋ฅผ ๊ฐ€์ ธ๋‹ค์ฃผ๋ฉด ๋ช‡ ๋ณ‘์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ณ„์‚ฐํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ์ฝœ๋ผ ๋ฌธ์ œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ๋ณด์œ  ์ค‘์ธ ๋นˆ ๋ณ‘์ด a๊ฐœ ๋ฏธ๋งŒ์ด๋ฉด, ์ถ”๊ฐ€์ ์œผ๋กœ ๋นˆ ๋ณ‘์„ ๋ฐ›์„ ์ˆœ ์—†์Šต๋‹ˆ๋‹ค. ์ƒ๋นˆ์ด๋Š” ์—ด์‹ฌํžˆ ๊ณ ์‹ฌํ–ˆ์ง€๋งŒ, ์ผ๋ฐ˜ํ™”๋œ ์ฝœ๋ผ ๋ฌธ์ œ์˜ ๋‹ต์„ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒ๋นˆ์ด๋ฅผ ๋„์™€, ์ผ๋ฐ˜ํ™”๋œ ์ฝœ๋ผ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด ์ฃผ์„ธ์š”.

์ฝœ๋ผ๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด ๋งˆํŠธ์— ์ฃผ์–ด์•ผ ํ•˜๋Š” ๋ณ‘ ์ˆ˜ a, ๋นˆ ๋ณ‘ a๊ฐœ๋ฅผ ๊ฐ€์ ธ๋‹ค ์ฃผ๋ฉด ๋งˆํŠธ๊ฐ€ ์ฃผ๋Š” ์ฝœ๋ผ ๋ณ‘ ์ˆ˜ b, ์ƒ๋นˆ์ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋นˆ ๋ณ‘์˜ ๊ฐœ์ˆ˜ n์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ƒ๋นˆ์ด๊ฐ€ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ฝœ๋ผ์˜ ๋ณ‘ ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ

  • 1 โ‰ค b < a โ‰ค n โ‰ค 1,000,000
  • ์ •๋‹ต์€ ํ•ญ์ƒ int ๋ฒ”์œ„๋ฅผ ๋„˜์ง€ ์•Š๊ฒŒ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

abnresult
212019
31209

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

  • ๋นˆ ๋ณ‘ 20๊ฐœ ์ค‘ 18๊ฐœ๋ฅผ ๋งˆํŠธ์— ๊ฐ€์ ธ๊ฐ€์„œ, 6๋ณ‘์˜ ์ฝœ๋ผ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ์ƒ๋นˆ์ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฝœ๋ผ ๋ณ‘์˜ ์ˆ˜๋Š” 8(20 โ€“ 18 + 6 = 8)๊ฐœ ์ž…๋‹ˆ๋‹ค.
  • ๋นˆ ๋ณ‘ 8๊ฐœ ์ค‘ 6๊ฐœ๋ฅผ ๋งˆํŠธ์— ๊ฐ€์ ธ๊ฐ€์„œ, 2๋ณ‘์˜ ์ฝœ๋ผ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ์ƒ๋นˆ์ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฝœ๋ผ ๋ณ‘์˜ ์ˆ˜๋Š” 4(8 โ€“ 6 + 2 = 4)๊ฐœ ์ž…๋‹ˆ๋‹ค.
  • ๋นˆ ๋ณ‘ 4 ๊ฐœ์ค‘ 3๊ฐœ๋ฅผ ๋งˆํŠธ์— ๊ฐ€์ ธ๊ฐ€์„œ, 1๋ณ‘์˜ ์ฝœ๋ผ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ์ƒ๋นˆ์ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฝœ๋ผ ๋ณ‘์˜ ์ˆ˜๋Š” 2(4 โ€“ 3 + 1 = 2)๊ฐœ ์ž…๋‹ˆ๋‹ค.
  • 3๋ฒˆ์˜ ๊ตํ™˜ ๋™์•ˆ ์ƒ๋นˆ์ด๋Š” 9(6 + 2 + 1 = 9)๋ณ‘์˜ ์ฝœ๋ผ๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

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

package programmers;

public class Cola {
	
	public static int solution(int a, int b, int n) {
        int answer = 0;
       
        while( n >= a) {
        	int quotient = n / a;
        	int remainder = n % a;
        	n = quotient * b + remainder;
        	answer += quotient * b;
        }
        return answer;
    }
	
	public static void main(String[] args) {
		solution(3, 1, 20);
	}

}

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

ํ•ด๋‹น ๋ฌธ์ œ๋Š” ๊ทธ๋ฆฌ๋“œ(Greedy) ๊ฐœ๋…์„ ์‚ฌ์šฉํ•œ ๋ฌธ์ œ๋กœ, ๊ฐ ๋‹จ๊ณ„์—์„œ ์ง€์—ญ์ ์œผ๋กœ ์ตœ์ ์ธ ์„ ํƒ์Œ ํ•จ์œผ๋กœ์จ ์ตœ์ข…์ ์œผ๋กœ ์ „์—ญ์ „์ธ ํ•ด๋‹ต์„ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋งค๊ฐœ ๋ณ€์ˆ˜ n >= a ์ด๋ผ๋Š” ์กฐ๊ฑด์„ while๋ฌธ์— ๋„ฃ์–ด, n = quotient * b + remainder ์ด ๊ฐ ๋‹จ๊ณ„์— ๋”ฐ๋ผ ์ ์ฐจ ๊ฐ์†Œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ตญ n์ด a๋ณด๋‹ค ์ž‘์•„์ง€๋Š” ์‹œ์ ๊นŒ์ง€ ๋ฐ˜๋ณต์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

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

comment-user-thumbnail
2023๋…„ 7์›” 17์ผ

์ €๋„ ๊ฐœ๋ฐœ์ž์ธ๋ฐ ๊ฐ™์ด ๊ต๋ฅ˜ ๋งŽ์ด ํ•ด๋ด์š” ใ…Žใ…Ž! ์„œ๋กœ ํ™”์ดํŒ…ํ•ฉ์‹œ๋‹ค!

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ