๐ ๋ฌธ1) ์์ฌ๋ ํ๋ฐฐ์์๋ฅผ ํธ๋ญ์ ์ฃ๋ ์ผ์ ํฉ๋๋ค. ์์ฌ๊ฐ ์ค์ด์ผ ํ๋ ํ๋ฐฐ์์๋ ํฌ๊ธฐ๊ฐ ๋ชจ๋ ๊ฐ์ผ๋ฉฐ 1๋ฒ ์์๋ถํฐ n๋ฒ ์์๊น์ง ๋ฒํธ๊ฐ ์ฆ๊ฐํ๋ ์์๋๋ก ์ปจํ ์ด๋ ๋ฒจํธ์ ์ผ๋ ฌ๋ก ๋์ฌ ์์ฌ์๊ฒ ์ ๋ฌ๋ฉ๋๋ค. ์ปจํ ์ด๋ ๋ฒจํธ๋ ํ ๋ฐฉํฅ์ผ๋ก๋ง ์งํ์ด ๊ฐ๋ฅํด์ ๋ฒจํธ์ ๋์ธ ์์๋๋ก(1๋ฒ ์์๋ถํฐ) ์์๋ฅผ ๋ด๋ฆด ์ ์์ต๋๋ค. ํ์ง๋ง ์ปจํ ์ด๋ ๋ฒจํธ์ ๋์ธ ์์๋๋ก ํ๋ฐฐ์์๋ฅผ ๋ด๋ ค ๋ฐ๋ก ํธ๋ญ์ ์ฃ๊ฒ ๋๋ฉด ํ๋ฐฐ ๊ธฐ์ฌ๋์ด ๋ฐฐ๋ฌํ๋ ์์์ ํ๋ฐฐ์์๊ฐ ์ค๋ ค ์๋ ์์๊ฐ ๋ง์ง ์์ ๋ฐฐ๋ฌ์ ์ฐจ์ง์ด ์๊น๋๋ค. ๋ฐ๋ผ์ ํ๋ฐฐ ๊ธฐ์ฌ๋์ด ๋ฏธ๋ฆฌ ์๋ ค์ค ์์์ ๋ง๊ฒ ์์ฌ๊ฐ ํ๋ฐฐ์์๋ฅผ ์ค์ด์ผ ํฉ๋๋ค.
๋ง์ฝ ์ปจํ ์ด๋ ๋ฒจํธ์ ๋งจ ์์ ๋์ธ ์์๊ฐ ํ์ฌ ํธ๋ญ์ ์ค์ด์ผ ํ๋ ์์๊ฐ ์๋๋ผ๋ฉด ๊ทธ ์์๋ฅผ ํธ๋ญ์ ์ค์ ์์๊ฐ ๋ ๋๊น์ง ์ ์ ๋ค๋ฅธ ๊ณณ์ ๋ณด๊ดํด์ผ ํฉ๋๋ค. ํ์ง๋ง ๊ณ ๊ฐ์ ๋ฌผ๊ฑด์ ํจ๋ถ๋ก ๋ ์ ๋ ์ ์์ด ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ๋ฅผ ์ถ๊ฐ๋ก ์ค์นํ์์ต๋๋ค. ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ๋ ์ ๋ค๋ก ์ด๋์ด ๊ฐ๋ฅํ์ง๋ง ์ ๊ตฌ ์ธ์ ๋ค๋ฅธ ๋ฉด์ด ๋งํ ์์ด์ ๋งจ ์์ ์์๋ง ๋บ ์ ์์ต๋๋ค(์ฆ, ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ์ ๋ณด๊ดํ ์์๋ถํฐ ๊บผ๋ด๊ฒ ๋ฉ๋๋ค). ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ๋ฅผ ์ด์ฉํด๋ ๊ธฐ์ฌ๋์ด ์ํ๋ ์์๋๋ก ์์๋ฅผ ์ฃ์ง ๋ชป ํ๋ค๋ฉด, ๋ ์ด์ ์์๋ฅผ ์ฃ์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์์ฌ๊ฐ 5๊ฐ์ ์์๋ฅผ ์ค์ด์ผ ํ๋ฉฐ, ํ๋ฐฐ ๊ธฐ์ฌ๋์ด ์๋ ค์ค ์์๊ฐ ๊ธฐ์กด์ ์ปจํ ์ด๋ ๋ฒจํธ์ ๋ค ๋ฒ์งธ, ์ธ ๋ฒ์งธ, ์ฒซ ๋ฒ์งธ, ๋ ๋ฒ์งธ, ๋ค์ฏ ๋ฒ์งธ ๋์ธ ํ๋ฐฐ์์ ์์์ธ ๊ฒฝ์ฐ, ์์ฌ๋ ์ฐ์ ์ฒซ ๋ฒ์งธ, ๋ ๋ฒ์งธ, ์ธ ๋ฒ์งธ ์์๋ฅผ ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ์ ๋ณด๊ดํฉ๋๋ค. ๊ทธ ํ ๋ค ๋ฒ์งธ ์์๋ฅผ ํธ๋ญ์ ์ฃ๊ณ ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ์์ ์ธ ๋ฒ์งธ ์์ ๋นผ์ ํธ๋ญ์์ฃ์ต๋๋ค. ๋ค์์ผ๋ก ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ค์ด์ผ ํ์ง๋ง ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ์์๋ ๋ ๋ฒ์งธ ์์๋ฅผ, ๊ธฐ์กด์ ์ปจํ ์ด๋ ๋ฒจํธ์๋ ๋ค์ฏ ๋ฒ์งธ ์์๋ฅผ ๊บผ๋ผ ์ ์๊ธฐ ๋๋ฌธ์ ๋์ด์์ ์์๋ ์ค์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํธ๋ญ์๋ 2๊ฐ์ ์์๋ง ์ค๋ฆฌ๊ฒ ๋ฉ๋๋ค.
ํ๋ฐฐ ๊ธฐ์ฌ๋์ด ์ํ๋ ์์ ์์๋ฅผ ๋ํ๋ด๋ ์ ์ ๋ฐฐ์ด order๊ฐ ์ฃผ์ด์ก์ ๋, ์์ฌ๊ฐ ๋ช ๊ฐ์ ์์๋ฅผ ์ค์ ์ ์๋์ง return ํ๋ solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ํ์ฌํญ
์
์ถ๋ ฅ ์
order | result |
---|---|
[4,3,1,2,5] | 2 |
[5,4,3,2,1] | 5 |
๋์ ํ์ด
package programmers;
import java.util.Stack;
public class DeliveryBox {
public static int solution(int[] order) {
int idx = 0;
Stack<Integer> stack = new Stack<>();
for(int i = 0; i < order.length; i++) {
stack.push(i+1);
while(!stack.isEmpty()) {
if(stack.peek() == order[idx]) {
stack.pop();
idx++;
}else break;
}
}
System.out.println(idx);
return idx;
}
public static void main(String[] args) {
int[] order = {1,3,5,7,9,2,4,6,8,10};
solution(order);
}
}
๐ ๋ฌธ2) ํธ๋ญ ์ฌ๋ฌ ๋๊ฐ ๊ฐ์ ๊ฐ๋ก์ง๋ฅด๋ ์ผ์ฐจ์ ๋ค๋ฆฌ๋ฅผ ์ ํด์ง ์์ผ๋ก ๊ฑด๋๋ ค ํฉ๋๋ค. ๋ชจ๋ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ค๋ฉด ์ต์ ๋ช ์ด๊ฐ ๊ฑธ๋ฆฌ๋์ง ์์๋ด์ผ ํฉ๋๋ค. ๋ค๋ฆฌ์๋ ํธ๋ญ์ด ์ต๋ bridge_length๋ ์ฌ๋ผ๊ฐ ์ ์์ผ๋ฉฐ, ๋ค๋ฆฌ๋ weight ์ดํ๊น์ง์ ๋ฌด๊ฒ๋ฅผ ๊ฒฌ๋ ์ ์์ต๋๋ค. ๋จ, ๋ค๋ฆฌ์ ์์ ํ ์ค๋ฅด์ง ์์ ํธ๋ญ์ ๋ฌด๊ฒ๋ ๋ฌด์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ํธ๋ญ 2๋๊ฐ ์ฌ๋ผ๊ฐ ์ ์๊ณ ๋ฌด๊ฒ๋ฅผ 10kg๊น์ง ๊ฒฌ๋๋ ๋ค๋ฆฌ๊ฐ ์์ต๋๋ค. ๋ฌด๊ฒ๊ฐ [7, 4, 5, 6]kg์ธ ํธ๋ญ์ด ์์๋๋ก ์ต๋จ ์๊ฐ ์์ ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๊ฑด๋์ผ ํฉ๋๋ค.
๊ฒฝ๊ณผ ์๊ฐ | ๋ค๋ฆฌ๋ฅผ ์ง๋ ํธ๋ญ | ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ํธ๋ญ | ๋๊ธฐ ํธ๋ญ |
---|---|---|---|
0 | [] | [] | [7,4,5,6] |
1~2 | [] | [7] | [4,5,6] |
3 | [7] | [4] | [5,6] |
4 | [7] | [4,5] | [6] |
5 | [7,4] | [5] | [6] |
6~7 | [7,4,5] | [6] | [] |
8 | [7,4,5,6] | [] | [] |
๋ฐ๋ผ์, ๋ชจ๋ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ค๋ฉด ์ต์ 8์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค.
solution ํจ์์ ๋งค๊ฐ๋ณ์๋ก ๋ค๋ฆฌ์ ์ฌ๋ผ๊ฐ ์ ์๋ ํธ๋ญ ์ bridge_length, ๋ค๋ฆฌ๊ฐ ๊ฒฌ๋ ์ ์๋ ๋ฌด๊ฒ weight, ํธ๋ญ ๋ณ ๋ฌด๊ฒ truck_weights๊ฐ ์ฃผ์ด์ง๋๋ค. ์ด๋ ๋ชจ๋ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ค๋ฉด ์ต์ ๋ช ์ด๊ฐ ๊ฑธ๋ฆฌ๋์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ํ ์กฐ๊ฑด
์
์ถ๋ ฅ ์
bridge_length | weight | truck_weights | return |
---|---|---|---|
2 | 10 | [7,4,5,6] | 8 |
100 | 100 | [10] | 101 |
100 | 100 | [10,10,10,10,10,10,10,10,10,10] | 110 |
๋์ ํ์ด
package programmers;
import java.util.LinkedList;
import java.util.Queue;
public class PassingOverTheBridge {
public static int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
Queue<Integer> queue = new LinkedList<>();
Queue<Integer> bridge = new LinkedList<>();
for(int truck_weight : truck_weights) {
queue.add(truck_weight);
}
int currentWeightOnBridge = 0;
for(int i = 0; i < bridge_length; i++) {
bridge.add(0);
}
while(!queue.isEmpty() || currentWeightOnBridge > 0) {
answer++;
currentWeightOnBridge -= bridge.poll();
if(!queue.isEmpty() && currentWeightOnBridge + queue.peek() <= weight) {
int nextTruckWeight = queue.poll();
bridge.add(nextTruckWeight);
currentWeightOnBridge += nextTruckWeight;
}else {
bridge.add(0);
}
}
return answer;
}
public static void main(String[] args) {
int[] truck_weights = {7,4,5,6};
solution(2, 10, truck_weights);
}
}
๋์ ์๊ฐ
๋ฌธ์ ๋ฅผ ์ดํดํ๋ฉด์ ์ ์ผ ์ฒ์ ํ ์๊ฐ์ ๋ค๋ฆฌ๊ธธ์ด๋ฅผ ๋ฐฐ์ด ๋๋ ์์๋ก ์ ์ฅํ๋ฉด ๋๊ฒ ๋ค๋ ์๊ฐ์ ํ์๋ค. ์๋ฅผ๋ค์ด, ๋ค๋ฆฌ ๊ธธ์ด๊ฐ 2
๋ผ๋ ๊ฒ์ ๋ฒ์คํ๋๊ฐ ๋ค๋ฆฌ ๊ธธ์ด๋ฅผ ํต๊ณผํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด 2์ด
๋ผ๋ ์๋ฏธ์ด๋ค. ๊ทธ๋ ๊ธฐ์ ๋ค์๊ณผ ๊ฐ์ ์ด๊ฑฐ์์ ์์ฑํด๋ณด์๋ค.
[0,0] // ๋ค๋ฆฌ์ ์ด๊ธฐ์ํ
---------------------
[0,7] // ๋ฌด๊ฒ 7์ง๋ฆฌ ๋ฒ์ค๊ฐ ๋ค๋ฆฌ ์ด์
์ ํต๊ณผํ ์ํ
[7,0] // ๋ฌด๊ฒ 7์ง๋ฆฌ ๋ฒ์ค๊ฐ ๋ค๋ฆฌ ๋์ ์ ์ํ
[0,4] // ๋ฌด๊ฒ 4์ง๋ฆฌ ๋ฒ์ค๊ฐ ๋ค๋ฆฌ ์ด์
์ ํต๊ณผํ ์ํ
[4,5] // ๋ ๋ฒ์ค์ ๋ฌด๊ฒ๊ฐ 10์ ๋์ง์๊ธฐ ๋๋ฌธ์ ๋ฌด๊ฒ 4,5 ๋ฒ์ค๊ฐ ๋ค๋ฆฌ ์์ ์ ์ํ
[5,0] // ๋ฌด๊ฒ 5์ง๋ฆฌ ๋ฒ์ค๊ฐ ๋ค๋ฆฌ ๋์ ์ ์ํ
[0,6] // ๋ฌด๊ฒ 6์ง๋ฆฌ ๋ฒ์ค๊ฐ ๋ค๋ฆฌ ์ด์
์ ํต๊ณผํ ์ํ
[6,0] // ๋ฌด๊ฒ 6์ง๋ฆฌ ๋ฒ์ค๊ฐ ๋ค๋ฆฌ ๋์ ์ ์ํ
[0,0] // ๋ชจ๋ ๋ฒ์ค๊ฐ ๋ค๋ฆฌ๋ฅผ ํต๊ณผํ ์ํ
์ด๋ ๊ฒ ์์ฑํ๊ณ ๋ณด๋ int[] ๋ฐฐ์ด๋ณด๋จ Queue
์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ FIFO
๊ตฌ์กฐ๋ฅผ ํ์ฉํ๋ฉด ํ์ ๊ฐ๋ค์ ์ฝ๊ฒ ์์ ํ ์ ์๊ฒ ๋ค๋ ์๊ฐ์ ํ์๋ค.
Queue<Integer> queue = new LinkedList<>();
Queue<Integer> bridge = new LinkedList<>();
for(int truck_weight : truck_weights) {
queue.add(truck_weight);
}
ํ์ฌ ๋๊ธฐ์ค์ธ ๋ฒ์ค ์ํ
๊ทธ๋ฆฌ๊ณ , ๋ค๋ฆฌ ์์ ์ ๋ฒ์ค๋ค์ ๋ฌด๊ฒ๋ฅผ ๊ด๋ฆฌํ๋ ๋ณ์ currentWeightOnBridge
๋ฅผ ์ ์ธํ๊ณ ์ด๊ธฐ๊ฐ์ 0์ผ๋ก ์ค์ ํ์๋ค.
int currentWeightOnBridge = 0;
for(int i = 0; i < bridge_length; i++) {
bridge.add(0);
}
ํต์ฌ ๋ก์ง์ ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
while(!queue.isEmpty() || currentWeightOnBridge > 0) {
answer++;
currentWeightOnBridge -= bridge.poll();
if(!queue.isEmpty() && currentWeightOnBridge + queue.peek() <= weight) {
int nextTruckWeight = queue.poll();
bridge.add(nextTruckWeight);
currentWeightOnBridge += nextTruckWeight;
}else {
bridge.add(0);
}
}
1. Loop ์กฐ๊ฑด : queue๊ฐ ๋น์ด์์ง ์๊ฑฐ๋(! queue.isEmpty()) ๋ค๋ฆฌ ์์ ํ์ฌ ๋ฌด๊ฒ (currentWeightOnBridge)๊ฐ 0๋ณด๋ค ํฐ ๋์ ๋ฃจํ๋ฅผ ๊ณ์ ์คํ
- queue : ๋๊ธฐ ์ค์ธ ํธ๋ญ๋ค์ ๋ฌด๊ฒ๊ฐ ๋ด๊ธด ํ
- currentWeightOnBridge : ๋ค๋ฆฌ ์์ ํ์ฌ ํธ๋ญ๋ค์ ๋ฌด๊ฒ ํฉ
2. Time Update : answer++;๋ฅผ ํตํด ์๊ฐ์ 1์ฉ ์ฆ๊ฐ
3. Move Truck out of the Bridge
- bridge.poll() : ๋ค๋ฆฌ ์ ์ฒซ ๋ฒ์งธ ํธ๋ญ(๊ฐ์ฅ ๋จผ์ ๋ค์ด์จ ํธ๋ญ)์ ๋ค๋ฆฌ์์ ๋นผ๋ด๊ณ
- currentWeightOnBridge -= bridge.poll() : ๊ทธ ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ
- currentWeightOnBridge์์ ๋บ๋ค.
4. Check and Move New Truck onto the Bridge
- if(!queue.isEmpty() && currentWeightOnBridge + queue.peek() <= weight): ๋๊ธฐ ์ค์ธ ํธ๋ญ์ด ์๊ณ , ๊ทธ ํธ๋ญ์ด ๋ค๋ฆฌ ์๋ก ์ฌ๋ผ๊ฐ๋ ๋ค๋ฆฌ์ ์ต๋ ๋ฌด๊ฒ(weight)๋ฅผ ์ด๊ณผํ์ง ์์ผ๋ฉด,
- queue.poll(): ๋๊ธฐ ํธ๋ญ์์ ํ๋๋ฅผ ๋นผ๋ด์ด(nextTruckWeight๋ก)
- bridge.add(nextTruckWeight): ๋ค๋ฆฌ ์์ ์ฌ๋ฆฌ๊ณ ,
- currentWeightOnBridge += nextTruckWeight: ๋ค๋ฆฌ ์์ ํ์ฌ ๋ฌด๊ฒ๋ฅผ ์
๋ฐ์ดํธํ๋ค.
- else: ๋ง์ฝ ์ ํธ๋ญ์ด ์ฌ๋ผ๊ฐ ์ ์๋ค๋ฉด,
- bridge.add(0): ๋ค๋ฆฌ ์์ 0์ ์ถ๊ฐํ์ฌ ํธ๋ญ์ด ์์์ ํํํ๋ค.
5. ์ ๋จ๊ณ๋ค์ ํ๊ฐ ๋น ๋๊น์ง ํน์ ๋ค๋ฆฌ ์์ ํธ๋ญ ๋ฌด๊ฒ๊ฐ 0์ด ๋ ๋๊น์ง ๊ณ์ ๋ฐ๋ณตํ๋ค.
๐ ๋ฌธ3) 0 ๋๋ ์์ ์ ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ ์๋ฅผ ์ด์ด ๋ถ์ฌ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ํฐ ์๋ฅผ ์์๋ด ์ฃผ์ธ์.
์๋ฅผ ๋ค์ด, ์ฃผ์ด์ง ์ ์๊ฐ [6, 10, 2]๋ผ๋ฉด [6102, 6210, 1062, 1026, 2610, 2106]๋ฅผ ๋ง๋ค ์ ์๊ณ , ์ด์ค ๊ฐ์ฅ ํฐ ์๋ 6210์ ๋๋ค.
0 ๋๋ ์์ ์ ์๊ฐ ๋ด๊ธด ๋ฐฐ์ด numbers๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์์๋ฅผ ์ฌ๋ฐฐ์นํ์ฌ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ํฐ ์๋ฅผ ๋ฌธ์์ด๋ก ๋ฐ๊พธ์ด return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
์
์ถ๋ ฅ ์
number | return |
---|---|
[6,10,2] | "6210" |
[3,30,34,5,9] | "9534330" |
๋์ ํ์ด
package programmers;
import java.util.Arrays;
public class BiggestNumber {
public static String solution(int[] numbers) {
String[] strNumbers = new String[numbers.length];
for(int i = 0; i < numbers.length; i++) {
strNumbers[i] = String.valueOf(numbers[i]);
}
Arrays.sort(strNumbers, (o1, o2) -> (o2 + o1).compareTo(o1+o2));
if(strNumbers[0].equals("0")) {
return "0";
}
return String.join("", strNumbers);
}
public static void main(String[] args) {
int[] numbers = {3, 30, 34, 5, 9};
solution(numbers);
}
}
๋์ ์๊ฐ
(o1, o2) -> (o2 + o1).compareTo(o1 + o2)
์ด ๋น๊ต ํจ์๋ ๋ ๋ฌธ์์ด o1๊ณผ o2๋ฅผ ์ฐ๊ฒฐํ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ
(o2 + o1 ๊ณผ o1 + o2)์ ๋น๊ตํ์ฌ ๋ฐฐ์ด์ ์ ๋ ฌํ๋๋ฐ ์ฌ์ฉ๋จ
์๋ฅผ ๋ค์ด o1 = "3" ์ด๊ณ o2 = "30"์ด๋ผ๋ฉด
"303","330"์ ๋น๊ตํ๊ฒ ๋๊ณ , ์ฒซ ๋ฒ์งธ ๋ฌธ์์ด์ด ๋ ๋ฒ์งธ ๋ฌธ์์ด๋ณด๋ค
์ฌ์ ์ ์ผ๋ก ์์ ๋ค๋ฉด ์์๋ฅผ, ๋ค๋ฐ๋ผ ์จ๋ค๋ฉด ์์๋ฅผ ๋ฐํ
์์๋ฅผ ๋ฐํ๋ฐ์ ๊ฒฝ์ฐ, ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ o2๊ฐ o1๋ณด๋ค ๋จผ์ ์ค๋๋ก ๋ฐฐ์ด์ ์ ๋ ฌ
๐ ๋ฌธ4) ํ์๋ฆฌ ์ซ์๊ฐ ์ ํ ์ข ์ด ์กฐ๊ฐ์ด ํฉ์ด์ ธ์์ต๋๋ค. ํฉ์ด์ง ์ข ์ด ์กฐ๊ฐ์ ๋ถ์ฌ ์์๋ฅผ ๋ช ๊ฐ ๋ง๋ค ์ ์๋์ง ์์๋ด๋ ค ํฉ๋๋ค.
๊ฐ ์ข ์ด ์กฐ๊ฐ์ ์ ํ ์ซ์๊ฐ ์ ํ ๋ฌธ์์ด numbers๊ฐ ์ฃผ์ด์ก์ ๋, ์ข ์ด ์กฐ๊ฐ์ผ๋ก ๋ง๋ค ์ ์๋ ์์๊ฐ ๋ช ๊ฐ์ธ์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
์
์ถ๋ ฅ ์
numbers | return |
---|---|
"17" | 3 |
"011" | 2 |
์
์ถ๋ ฅ ์ ์ค๋ช
์์ #1
์์ #2
๋์ ํ์ด
package programmers;
import java.util.LinkedHashSet;
import java.util.Set;
public class FindPrimeNum2 {
static Set<String> set = new LinkedHashSet <>();
public static void dfs(String prefix, String remaining) {
if(!prefix.isEmpty()) {
set.add(Integer.toString(Integer.parseInt(prefix)));
}
System.out.println(set);
if(remaining.isEmpty()) {
return;
}
for(int i = 0; i < remaining.length(); i++) {
dfs(prefix + remaining.charAt(i), remaining.substring(0,i) + remaining.substring(i+1));
}
}
public static int solution(String numbers) {
int answer = 0;
dfs("", numbers);
for(String numStr : set) {
int num = Integer.parseInt(numStr);
if(isPrime(num)) {
answer++;
}
}
return answer;
}
public static boolean isPrime(int n) {
if(n < 2) return false;
for(int i = 2; i <= Math.sqrt(n); i++) {
if(n % i == 0) return false;
}
return true;
}
public static void main(String[] args) {
String numbers = "011";
solution(numbers);
}
}
๋์ ์๊ฐ
์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ๋ฅผ ํ๋ฉด์ ๋ฌธํฑ์ ํฑํ๊ณ ๊ฑธ๋ฆฌ๋ ๋๋์ด ๋๋ ๋ฌธ์ ๊ฐ DFS
, BFS
๊ฐ ์์๋ค. ๋งค๋ฒ ๋ฌธ์ ๋ฅผ ํ๋ฉด์ "๋ค์์ ๋์ค๋ฉด ๋ค์ ํ์ง ๋ญ...."
ํ๊ณ ์ง๋์ณค๋๋ฐ, ์ค๋์ ๊ธฐํ์ฝ ๊น์ด ์ฐ์ ํ์์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํด๋ฅผ ํ๊ธฐ์ํด ํ๋ฃจ ์ข
์ผ ์ด ๋ฌธ์ ๋ฅผ ์ก๊ณ ์์๋ค. ์ด๊ฑธ ์ ํ๋ฃจ ์ข
์ผ ์ก๊ณ ์๋๋ ๋ถ๋ค๋ ๊ณ์๊ฒ ์ง๋ง, ๋๋ก์๋ ์ด๊ฒ์ ์ดํด ๋ชปํ๋ฉด ์์ผ๋ก ๋์๊ฐ ์ ์๊ธฐ๋๋ฌธ์ด๋ค. ์ง๊ธ ์ด ๋ฌธ์ ์ ํ์ด๋ ๋์ ๋จธ๋ฆฟ์์์ 100% ๋์จ ๋ต์ ์๋์ง๋ง ๋ด๊ฐ ์ดํดํ ๊ฒ์ ํ๋ฒ ๋ ๊ธฐ๋กํจ์ผ๋ก์จ ๋ค์์ ์ด์ ๋น์ทํ ๋ฌธ์ ๊ฐ ๋์ค๋ฉด ๊ผญ ๋์ ํ์ผ๋ก ํด๊ฒฐํ๊ฒ ๋ค.(feat.chatGPT)
dfs("", "011")
- i = 0 dfs("0", "11")
- i = 0 dfs("01", "1")
- i = 0; dfs("011","") -> ์ข ๋ฃ (ํ์ ํธ์ถ ์์)
- i = 1 dfs("01", "1") -> ์ด๋ฏธ ํธ์ถ๋จ (์ค๋ณต)
- i = 1 dfs("1", "01")
- i = 0 dfs("10", "1")
- i = 0 dfs("101", "") -> ์ข ๋ฃ
- i = 1 dfs("11", "0")
- i = 0 dfs("110", "") -> ์ข ๋ฃ
- i = 2 dfs("1", "01") -> ์ด๋ฏธ ํธ์ถ๋จ (์ค๋ณต)
์์ ํ๋ณ ๋ฉ์๋
public static boolean isPrime(int n) {
if(n < 2) return false;
for(int i = 2; i <= Math.sqrt(n); i++) {
if(n % i == 0) return false;
}
return true;
}
๐ ๋ฌธ5) ์ด๋ค ์ซ์์์ k๊ฐ์ ์๋ฅผ ์ ๊ฑฐํ์ ๋ ์ป์ ์ ์๋ ๊ฐ์ฅ ํฐ ์ซ์๋ฅผ ๊ตฌํ๋ ค ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ซ์ 1924์์ ์ ๋ ๊ฐ๋ฅผ ์ ๊ฑฐํ๋ฉด [19, 12, 14, 92, 94, 24] ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ์ค ๊ฐ์ฅ ํฐ ์ซ์๋ 94 ์ ๋๋ค.
๋ฌธ์์ด ํ์์ผ๋ก ์ซ์ number์ ์ ๊ฑฐํ ์์ ๊ฐ์ k๊ฐ solution ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. number์์ k ๊ฐ์ ์๋ฅผ ์ ๊ฑฐํ์ ๋ ๋ง๋ค ์ ์๋ ์ ์ค ๊ฐ์ฅ ํฐ ์ซ์๋ฅผ ๋ฌธ์์ด ํํ๋ก return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ํ ์กฐ๊ฑด
์
์ถ๋ ฅ ์
number | k | return |
---|---|---|
"1924" | 2 | "94" |
"1231234" | 3 | "3234" |
"4177252841" | 4 | "775841" |
๋์ ํ์ด
package programmers;
import java.util.Stack;
public class MakingBigNum {
public static String solution(String number, int k) {
Stack<Character> stack = new Stack<>();
for(char c : number.toCharArray()) {
while(!stack.isEmpty() && stack.peek() < c && k > 0) {
stack.pop();
k--;
}
stack.push(c);
}
while(k > 0) {
stack.pop();
k--;
}
StringBuilder sb = new StringBuilder();
for(char c : stack) {
sb.append(c);
}
return sb.toString();
}
public static void main(String[] args) {
String number = "4177252841";
solution(number, 4);
}
}