๐ ๋ฌธ1) ๋ฐฐ์ด array์ i๋ฒ์งธ ์ซ์๋ถํฐ j๋ฒ์งธ ์ซ์๊น์ง ์๋ฅด๊ณ ์ ๋ ฌํ์ ๋, k๋ฒ์งธ์ ์๋ ์๋ฅผ ๊ตฌํ๋ ค ํฉ๋๋ค.
์๋ฅผ ๋ค์ด array๊ฐ [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3์ด๋ผ๋ฉด
๋ฐฐ์ด array, [i, j, k]๋ฅผ ์์๋ก ๊ฐ์ง 2์ฐจ์ ๋ฐฐ์ด commands๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, commands์ ๋ชจ๋ ์์์ ๋ํด ์์ ์ค๋ช ํ ์ฐ์ฐ์ ์ ์ฉํ์ ๋ ๋์จ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
์
์ถ๋ ฅ ์
array | commands | return |
---|---|---|
[1, 5, 2, 6, 3, 7, 4] | [[2, 5, 3], [4, 4, 1], [1, 7, 3]] | [5, 6, 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 | result |
---|---|
[2,1,3,4,1] | [2,3,4,5,6,7] |
5,0,2,7 | 2,5,7,9,12 |
์
์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์ #1
์
์ถ๋ ฅ ์ #2
๋์ ํ์ด
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 ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
์
์ถ๋ ฅ ์
food | result |
---|---|
[1,3,4,6] | 1223330333221 |
[1,7,1,2] | 111303111 |
์
์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์ #1
์
์ถ๋ ฅ ์ #2
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"๋ผ๊ณ ํ ๋, ๊ฐ ๊ธ์๋ค์ ์ผ์ชฝ๋ถํฐ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฝ์ด ๋๊ฐ๋ฉด์ ๋ค์๊ณผ ๊ฐ์ด ์งํํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ต์ข
๊ฒฐ๊ณผ๋ฌผ์ [-1, -1, -1, 2, 2, 2]๊ฐ ๋ฉ๋๋ค.
๋ฌธ์์ด s์ด ์ฃผ์ด์ง ๋, ์์ ๊ฐ์ด ์ ์๋ ์ฐ์ฐ์ ์ํํ๋ ํจ์ solution์ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
์
์ถ๋ ฅ ์
s | result |
---|---|
"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 ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
์
์ถ๋ ฅ ์
a | b | n | result |
---|---|---|---|
2 | 1 | 20 | 19 |
3 | 1 | 20 | 9 |
์
์ถ๋ ฅ ์ #2
๋์ ํ์ด
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
๋ณด๋ค ์์์ง๋ ์์ ๊น์ง ๋ฐ๋ณต์ ์ํํ๋ค.
์ ๋ ๊ฐ๋ฐ์์ธ๋ฐ ๊ฐ์ด ๊ต๋ฅ ๋ง์ด ํด๋ด์ ใ ใ ! ์๋ก ํ์ดํ ํฉ์๋ค!