π λ¬Έ1) μ μμλ μλμ μμμλ μ΄κ±° λλ μ΄λ€ μμλ₯Ό λ°λ₯΄λ μμλ€μ λͺ¨μμ νν(tuple)μ΄λΌκ³ ν©λλ€. nκ°μ μμλ₯Ό κ°μ§ ννμ n-νν(n-tuple)μ΄λΌκ³ νλ©°, λ€μκ³Ό κ°μ΄ ννν μ μμ΅λλ€.
(a1, a2, a3, ..., an)
ννμ λ€μκ³Ό κ°μ μ±μ§μ κ°μ§κ³ μμ΅λλ€.
ex : (1, 2, 3) β (1, 3, 2)
μμμ κ°μκ° nκ°μ΄κ³ , μ€λ³΅λλ μμκ° μλ νν (a1, a2, a3, ..., an)μ΄ μ£Όμ΄μ§ λ(λ¨, a1, a2, ..., anμ μμ°μ), μ΄λ λ€μκ³Ό κ°μ΄ μ§ν© κΈ°νΈ '{', '}'λ₯Ό μ΄μ©ν΄ ννν μ μμ΅λλ€.
{{a1}, {a1, a2}, {a1, a2, a3}, {a1, a2, a3, a4}, ... {a1, a2, a3, a4, ..., an}}
μλ₯Ό λ€μ΄ ννμ΄ (2, 1, 3, 4)μΈ κ²½μ° μ΄λ
{{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}
μ κ°μ΄ ννν μ μμ΅λλ€. μ΄λ, μ§ν©μ μμμ μμκ° λ°λμ΄λ μκ΄μμΌλ―λ‘
{{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}
{{2, 1, 3, 4}, {2}, {2, 1, 3}, {2, 1}}
{{1, 2, 3}, {2, 1}, {1, 2, 4, 3}, {2}}
λ λͺ¨λ κ°μ νν (2, 1, 3, 4)λ₯Ό λνλ λλ€.
νΉμ ννμ νννλ μ§ν©μ΄ λ΄κΈ΄ λ¬Έμμ΄ sκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, sκ° νννλ ννμ λ°°μ΄μ λ΄μ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ νμ¬ν
μ
μΆλ ₯ μ
s | result |
---|---|
{{2},{2,1},{2,1,3},{2,1,3,4}} | [2,1,3,4] |
{{1,2,3},{2,1},{1,2,4,3},{2}} | [2,1,3,4] |
{{20,111},{111}} | [111,20] |
{{123}} | [123] |
{{4,2,3},{3},{2,3,4,1},{2,3}} | [3,2,4,1] |
λμ νμ΄
package programmers;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashSet;
public class Tuple {
public static int[] solution(String s) {
s = s.substring(2,s.length() - 2);
String[] group = s.split("\\},\\{");
int[][] NTuple = new int[group.length][];
for(int i = 0; i < group.length; i++) {
String[] nums = group[i].split(",");
NTuple[i] = new int[nums.length];
for(int j = 0; j < nums.length; j++) {
NTuple[i][j] = Integer.parseInt(nums[j]);
}
}
Arrays.sort(NTuple, Comparator.comparingInt(a -> a.length));
HashSet<Integer> set = new HashSet<>();
int[] answer = new int[NTuple.length];
int index = 0;
for(int[] arr : NTuple) {
for(int num : arr) {
if(!set.contains(num)) {
set.add(num);
answer[index++] = num;
}
}
}
System.out.println(Arrays.toString(answer));
return answer;
}
public static void main(String[] args) {
solution("{{20,111},{111}}");
}
}
λμ μκ°
λ§€κ°λ³μλ‘ μ£Όμ΄μ§λ String s
λ₯Ό λ¬Έμ μμ μνλ νμμΌλ‘ μ²λ¦¬λ₯Ό νκΈ°μν μ μ²λ¦¬ κ³Όμ μ΄ νμνλ€. λ¬Έμλ‘ μ£Όμ΄μ§λ {{20,111},{111}}
νμμμ {20,111}
,{111}
μ λΆλ¦¬ν΄μΌνλλ° μ²μ {{
κ³Ό λ }}
λ₯Ό μ κ±°νλ©΄ 20,111 }, {111
μ΄ λλ€.
μ μ μ²λ¦¬ κ³Όμ μ κ±°μΉκ³ λ λ€ μμ±λ 20,111},{111
λ₯Ό 20,111
, 111
λ‘ λλλ €λ©΄ μ κ·μμ μ¬μ©νμ¬ νλ² λ μ μ²λ¦¬κ³Όμ μ΄ νμνλ€.
String[] group = s.split("\\},\\{");
\\}
: } λ¬Έμλ₯Ό μλ―Ένλ€. Java λ¬Έμμ΄μμ λ°±μ¬λμ \λ νΉμ λ¬Έμλ‘ μΈμλκΈ° λλ¬Έμ μ κ·μμμ 리ν°λ΄ } λ¬Έμλ₯Ό μλ―Ένλ €λ©΄ \}λ‘ νκΈ°ν΄μΌ νλ€.
,
: μΌνλ₯Ό μλ―Έ
\\{
: { λ¬Έμλ₯Ό μλ―Ένλ€. λ§μ°¬κ°μ§λ‘ Java λ¬Έμμ΄μμ λ°±μ¬λμ \λ νΉμ λ¬Έμλ‘ μΈμλκΈ° λλ¬Έμ μ κ·μμμ 리ν°λ΄ { λ¬Έμλ₯Ό μλ―Ένλ €λ©΄ \{λ‘ νκΈ°ν΄μΌ νλ€
λ°λΌμ, μ£Όμ΄μ§ μ κ·μ \},\{λ λ¬Έμμ΄μμ },{ ν¨ν΄μ μ°Ύλ κ²μ μλ―Έ
νμ¬ [20,111, 111]
λ λ¬Έμλ‘ μ‘΄μ¬νκΈ° λλ¬Έμ λ΄κ° μνλ κ°μΌλ‘ μ¬μ©νκΈ° μν΄μλ intνμΌλ‘ λ³ν λ° int[][]
λ°°μ΄λ‘ μ μΈνμ¬
ννλ‘ μ‘΄μ¬ν΄μΌνλ€. μ΄λ₯Ό μν΄ λ€μκ³Ό κ°μ λ‘μ§μ ꡬμ±νλ€.
int[][] NTuple = new int[group.length][];
for(int i = 0; i < group.length; i++) {
String[] nums = group[i].split(",");
NTuple[i] = new int[nums.length];
for(int j = 0; j < nums.length; j++) {
NTuple[i][j] = Integer.parseInt(nums[j]);
}
}
NTuple
μ 2μ°¨μ λ°°μ΄μ μ°Έμ‘°νλ λ³μμ΄κ³ , 첫 λ²μ§Έ μ°¨μμ ν¬κΈ°λ group.length
λ‘ μ ν΄μ Έ μμ§λ§, λ λ²μ§Έ μ°¨μμ ν¬κΈ°λ μμ§ μ§μ λμ§ μμ
μ΄λ κ² λ λ²μ§Έ μ°¨μμ ν¬κΈ°λ₯Ό 미리 μ§μ νμ§ μμ μ±λ‘ λ°°μ΄μ μμ±νλ©΄, λμ€μ κ° μλΈλ°°μ΄μ ν¬κΈ°λ₯Ό λ€λ₯΄κ² μ§μ ν μ μμ. μ΄κ²μ λΉμ μ§μ¬κ°ν λ°°μ΄
λλ λΉκ· μΌ 2μ°¨μ λ°°μ΄
μ΄λΌκ³ ν¨
NTuple[i] = new int[nums.length]; // κ° μλΈλ°°μ΄ NTuple[i]μ ν¬κΈ°λ₯Ό μ§μ
// μ¬κΈ°μ nums.lengthλ κ° κ·Έλ£Ήμ μμ κ°μμ λ°λΌ λ€λ₯Ό μ μκΈ° λλ¬Έμ, μλΈ λ°°μ΄μ ν¬κΈ°λ₯Ό λμ μΌλ‘ ν λΉν μ μμ
μ κ³Όμ κΉμ§κ° λ΄κ° μκ°ν λ°©λ²μ μ¬μ©νκΈ° μν μ μ²λ¦¬ κ³Όμ μ΄μκ³ , μ κ°μ νλ²λ μ λ ¬νμ¬
NTuple[0]: [111]
NTuple[1]: [20, 111]
ν΄λΉ λ΄μ©μ²λΌ λ°°μ΄μ ν¬κΈ°κ° μμκ²λΆν° ν° μμλλ‘ μ°¨λ‘λ‘ μ λ ¬μμΌ μ²« λ²μ§Έμμ 111
μ μ μ₯νλ©΄ λ€μ λ²μ 111
μ μ μΈν 20
μ μ ννκ² νλκ²μ΄ μ΅μ’
λͺ©νμ΄λ€.
Arrays.sort(NTuple, Comparator.comparingInt(a -> a.length));
Comparator
λ κ°μ²΄μ μμλ μ°μ μμλ₯Ό κ²°μ νλ λ° μ¬μ©νλλ μΈν°νμ΄μ€
Comparator.comparingInt
λ μ£Όμ΄μ§ ν¨μμ λ°λΌ μ μ κ°μ λ°ννλ Comparator
κ°μ²΄λ₯Ό μμ±νλ μ μ λ©μλ
a -> a.length
λ int[]
νμ
μ λ°°μ΄ a
λ₯Ό μ
λ ₯λ°μ a.length
λ₯Ό λ°ν
μ¦, NTuple
λ°°μ΄μ μλΈ λ°°μ΄λ€μ κ°κ°μ κΈΈμ΄λ₯Ό κΈ°μ€μΌλ‘ μ€λ¦μ°¨μ μ λ ¬
μ κ³Όμ μ ν΅ν΄ μ λ ¬λ κ°μ μ΄λ»κ² μ€λ³΅μ κ±° ν κ²μΈκ°?
HashSet<Integer> set = new HashSet<>();
int[] answer = new int[NTuple.length];
int index = 0;
for(int[] arr : NTuple) {
for(int num : arr) {
if(!set.contains(num)) {
set.add(num);
answer[index++] = num;
}
}
}
setμ μ€λ³΅λ κ°μ νμ©νμ§ μλ μλ£κ΅¬μ‘°λ‘ μ€λ³΅λ κ°μ μΆμ νκΈ° μν΄ μ¬μ©
if(!set.contains(num))
num
μ΄set
μ μ‘΄μ¬νμ§ μλ κ²½μ° (μ¦, μ€λ³΅λμ§ μλ κ²½μ°)λ§ λ‘μ§μ μ€νset.add(num)
num
μ set
μ μΆκ°, μ«μκ° μ΄νμ λ€μ λνλλλΌλ μ€λ³΅μΌλ‘ νλ¨λ μμκ² ν¨μ΄ μ 체 λ‘μ§μ κ²°κ³Όλ‘, answer
λ°°μ΄μ NTuple
μμ λ°κ²¬λ μ€λ³΅λμ§ μλ μ«μλ€λ§μ μμλλ‘ ν¬ν¨νκ² λλ€.
π λ¬Έ2) νλ‘κ·Έλλ¨Έμ€ νμμλ κΈ°λ₯ κ°μ μμ μ μν μ€μ λλ€. κ° κΈ°λ₯μ μ§λκ° 100%μΌ λ μλΉμ€μ λ°μν μ μμ΅λλ€.
λ, κ° κΈ°λ₯μ κ°λ°μλλ λͺ¨λ λ€λ₯΄κΈ° λλ¬Έμ λ€μ μλ κΈ°λ₯μ΄ μμ μλ κΈ°λ₯λ³΄λ€ λ¨Όμ κ°λ°λ μ μκ³ , μ΄λ λ€μ μλ κΈ°λ₯μ μμ μλ κΈ°λ₯μ΄ λ°°ν¬λ λ ν¨κ» λ°°ν¬λ©λλ€.
λ¨Όμ λ°°ν¬λμ΄μΌ νλ μμλλ‘ μμ μ μ§λκ° μ ν μ μ λ°°μ΄ progressesμ κ° μμ μ κ°λ° μλκ° μ ν μ μ λ°°μ΄ speedsκ° μ£Όμ΄μ§ λ κ° λ°°ν¬λ§λ€ λͺ κ°μ κΈ°λ₯μ΄ λ°°ν¬λλμ§λ₯Ό return νλλ‘ solution ν¨μλ₯Ό μμ±νμΈμ.
μ νμ¬ν
μ
μΆλ ₯ μ
progresses | speeds | return |
---|---|---|
[93,30,55] | [1,30,5] | [2,1] |
[95,90,99,99,80,99] | [1,1,1,1,1,1] | [1,3,2] |
μ
μΆλ ₯ μ μ€λͺ
μ
μΆλ ₯ μ #1
첫 λ²μ§Έ κΈ°λ₯μ 93% μλ£λμ΄ μκ³ ν루μ 1%μ© μμ
μ΄ κ°λ₯νλ―λ‘ 7μΌκ° μμ
ν λ°°ν¬κ° κ°λ₯ν©λλ€.
λ λ²μ§Έ κΈ°λ₯μ 30%κ° μλ£λμ΄ μκ³ ν루μ 30%μ© μμ
μ΄ κ°λ₯νλ―λ‘ 3μΌκ° μμ
ν λ°°ν¬κ° κ°λ₯ν©λλ€. νμ§λ§ μ΄μ 첫 λ²μ§Έ κΈ°λ₯μ΄ μμ§ μμ±λ μνκ° μλκΈ° λλ¬Έμ 첫 λ²μ§Έ κΈ°λ₯μ΄ λ°°ν¬λλ 7μΌμ§Έ λ°°ν¬λ©λλ€.
μΈ λ²μ§Έ κΈ°λ₯μ 55%κ° μλ£λμ΄ μκ³ ν루μ 5%μ© μμ
μ΄ κ°λ₯νλ―λ‘ 9μΌκ° μμ
ν λ°°ν¬κ° κ°λ₯ν©λλ€.
λ°λΌμ 7μΌμ§Έμ 2κ°μ κΈ°λ₯, 9μΌμ§Έμ 1κ°μ κΈ°λ₯μ΄ λ°°ν¬λ©λλ€.
μ
μΆλ ₯ μ #2
λͺ¨λ κΈ°λ₯μ΄ ν루μ 1%μ© μμ μ΄ κ°λ₯νλ―λ‘, μμ μ΄ λλκΈ°κΉμ§ λ¨μ μΌμλ κ°κ° 5μΌ, 10μΌ, 1μΌ, 1μΌ, 20μΌ, 1μΌμ λλ€. μ΄λ€ κΈ°λ₯μ΄ λ¨Όμ μμ±λμλλΌλ μμ μλ λͺ¨λ κΈ°λ₯μ΄ μμ±λμ§ μμΌλ©΄ λ°°ν¬κ° λΆκ°λ₯ν©λλ€.
λ°λΌμ 5μΌμ§Έμ 1κ°μ κΈ°λ₯, 10μΌμ§Έμ 3κ°μ κΈ°λ₯, 20μΌμ§Έμ 2κ°μ κΈ°λ₯μ΄ λ°°ν¬λ©λλ€.
λμ νμ΄
#1
package programmers;
import java.util.ArrayList;
public class Distribution {
public static int[] solution(int[] progresses, int[] speeds) {
ArrayList<Integer> list = new ArrayList<>();
for(int i = 0; i < progresses.length; i++) {
int cnt = 0;
int temp = 100 - progresses[i];
int day = temp % speeds[i] == 0 ? temp / speeds[i] : (temp /speeds[i]) + 1;
list.add(day);
}
System.out.println(list);
ArrayList<Integer> answerList = new ArrayList<>();
int prevDay = list.get(0);
int count = 1;
for(int i = 1; i < list.size(); i++) {
if(list.get(i) <= prevDay) {
count++;
}else {
answerList.add(count);
count = 1;
prevDay = list.get(i);
}
}
answerList.add(count);
int[] answer = new int[answerList.size()];
for (int i = 0; i < answerList.size(); i++) {
answer[i] = answerList.get(i);
}
return answer;
}
public static void main(String[] args) {
int[] progresses = new int[] {95,90,99,99,80,99};
int[] speeds = new int[] {1,1,1,1,1,1};
solution(progresses, speeds);
}
}
#2(queue)λ₯Ό μ΄μ©ν λ°©λ²
package programmers;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
public class Distribution {
public static int[] solution(int[] progresses, int[] speeds) {
ArrayList<Integer> answerList = new ArrayList<>();
Queue<Integer> queue = new LinkedList<>();
for(int i = 0; i < progresses.length; i++) {
int cnt = 0;
int temp = 100 - progresses[i];
int day = temp % speeds[i] == 0 ? temp / speeds[i] : (temp /speeds[i]) + 1;
queue.add(day);
}
System.out.println(queue);
while(!queue.isEmpty()) {
int current = queue.poll();
int count = 1;
while(!queue.isEmpty() && queue.peek() <= current) {
count++;
queue.poll();
}
answerList.add(count);
}
System.out.println(answerList);
int[] answer = new int[answerList.size()];
for (int i = 0; i < answerList.size(); i++) {
answer[i] = answerList.get(i);
}
return answer;
}
public static void main(String[] args) {
int[] progresses = new int[] {95,90,99,99,80,99};
int[] speeds = new int[] {1,1,1,1,1,1};
solution(progresses, speeds);
}
}
λμ μκ°
progresses: `[95,90,99,99,80,99]`
speeds: `[1,1,1,1,1,1]`
λ₯Ό λ¨Όμ μ΄ν΄λ³΄μ.
progresses[0] = 95 // speed : 1
progresses[1] = 90 // speed : 1
progresses[2] = 99 // speed : 1
progresses[3] = 99 // speed : 1
progresses[4] = 80 // speed : 1
progresses[5] = 99 // speed : 1
첫 λ²μ§Έ κ³Όμ μ λλ΄λλ° 5μΌμ΄ μμ, λ λ²μ§Έ κ³Όμ μ λλ΄λλ° 10μΌ μμ, μΈ λ²μ§Έ κ³Όμ μ λλ΄λλ° 1μΌ, λ€ λ²μ§Έ κ³Όμ μ λλ΄λλ° 1μΌ, λ€μ― λ²μ§Έ κ³Όμ μ λλ΄λλ° 20μΌ μμ, λ§μ§λ§ κ³Όμ μ λλ΄λλ° 1μΌ μμλλ€. (κ° κΈ°λ₯μ κ°λ°μλλ λͺ¨λ λ€λ₯΄κΈ° λλ¬Έμ λ€μ μλ κΈ°λ₯μ΄ μμ μλ κΈ°λ₯λ³΄λ€ λ¨Όμ κ°λ°λ μ μκ³ , μ΄λ λ€μ μλ κΈ°λ₯μ μμ μλ κΈ°λ₯μ΄ λ°°ν¬λ λ ν¨κ» λ°°ν¬ λλ€λ μ μ κΈ°μ΅νμ)
Queue<Integer> queue = new LinkedList<>();
for(int i = 0; i < progresses.length; i++) {
int temp = 100 - progresses[i];
int day = temp % speeds[i] == 0 ? temp / speeds[i] : (temp /speeds[i]) + 1;
queue.add(day);
}
Queue
λ μΈν°νμ΄μ€λ‘ ν(Queue) μλ£κ΅¬μ‘°λ First-In-First-Out(FIFO)
μμΉμ λ°λ₯΄λ©°, λ¨Όμ λ€μ΄κ° μμκ° λ¨Όμ λμ€κ² λλ€. μμ λ‘μ§μ μ΄ν΄λ³΄λ©΄ progresses
κ³Όμ μ μννλ©° μμ
μλ£μΌ = 100 - progresses[i]
μ λ¨μ μλ κ³Όμ μ μλ―Ένλ©°, λ¨μ κ³Όμ μ speedλ‘ λλ λλ¨Έμ§κ° 0 μ΄λ©΄ temp / sppeds[i]
κ·Έλ μ§ μμΌλ©΄ (temp / speeds[i]) + 1
μ νλλ°, μ΄λ₯Ό κ°λ¨ν μλ‘ λ³΄λ©΄, 30% λ°°ν¬κ° μλ£λ μμ
μ΄ μμλ, speedκ° 30μ΄λΌλ©΄, λͺ¨λ μμ
μ΄ μλ£λ λκΉμ§ 걸리λ μκ°μ 3μΌμ΄ μμλλ€.
1μΌμ°¨ : 30 + 30
2μΌμ°¨ : 30 + 30 + 30
3μΌμ°¨ : 100%
// μ΄λ₯Ό λ‘μ§μΌλ‘ ꡬννλ©΄
100 - 30 // λ¨μ κ³Όμ 70
70 / 30 μ μ§ννλ©΄ λͺ«μ 2κ° λμ€κ² λλλ°
//μ€μ λ‘ κ±Έλ¦¬λ μκ°μ 3μΌ μ΄λ―λ‘ ν΄λΉ κ·μΉμ λ‘μ§ννλ©΄
int day = temp % speeds[i] == 0 ? temp / speeds[i] : (temp /speeds[i]) + 1;
μ΄ λλ€. μ κ³Όμ μ κ±°μΉλ©΄ `queue`μλ κ° μμ
μ΄ μλ£λκΈ°κΉμ§ νμν μΌμκ° μ μ₯λλ€.
while(!queue.isEmpty()) {
int current = queue.poll();
int count = 1;
while(!queue.isEmpty() && queue.peek() <= current) {
count++;
queue.poll();
}
answerList.add(count);
}
ν΄λΉ loopλ₯Ό 보면,
queue
μμ poll()
λ©μλλ₯Ό μ¬μ©νμ¬ μ²« λ²μ§Έ μμ
μ μλ£μΌμΈ 5
λ₯Ό κ°μ Έμ΄, μ΄λ₯Ό current
λ‘ μ§μ νκ³ , κ·Έ λ μ μλ£λ μμ
μλ₯Ό κ³μ°νλ€.current = 5
queue
μ λ¨μμλ μμ
μλ£μΌλ€μ νμΈνλ©° current
λ³΄λ€ μκ±°λ κ°μ μλ£μΌμ κ°λ μμ
λ€μ λͺ¨λ ν΄λΉ λ μ§μ ν¨κ» λ°°ν¬λ κ². κ·Έλ¬λ, 10
μ 5
λ³΄λ€ ν¬λ―λ‘ μ΄ μμ μμ count
λ 1
μ κ·ΈμΉκ³ , 첫 λ²μ§Έ answerList
μ μΆκ°
answerList: [1]
10
μ current
λ‘ κ°μ Έμ΄current = 10
queue
μ λ¨μμλ κ°λ€ μ€ 10
λ³΄λ€ μκ±°λ κ°μ μλ£μΌμ κ°λ μμ
λ€μ 1
,1
μ΄κ³ μ΄ λ μμ
κ³Ό νμ¬ μμ
κΉμ§ μ΄ 3κ°μ μμ
μ΄ ν΄λΉ λ μ λ°°ν¬λ κ²μ΄λ―λ‘ count
λ 3
answerList: [1,3]
20
μ current
λ‘ κ°μ Έμ΄current = 20
queue
μ λ¨μμλ κ°λ€ μ€ 20
λ³΄λ€ μκ±°λ κ°μ μλ£μΌμ κ°λ μμ
μ 1
μ΄κ³ , νμ¬ μμ
ν¬ν¨ μ΄ 2κ°μ μμ
μ΄ ν΄λΉ λ μ λ°°ν¬λ¨ count
λ 2
answerList: [1,3,2]
π λ¬Έ3) μ΄μ체μ μ μν μ€ νλλ μ»΄ν¨ν° μμ€ν μ μμμ ν¨μ¨μ μΌλ‘ κ΄λ¦¬νλ κ²μ λλ€. μ΄ λ¬Έμ μμλ μ΄μ체μ κ° λ€μ κ·μΉμ λ°λΌ νλ‘μΈμ€λ₯Ό κ΄λ¦¬ν κ²½μ° νΉμ νλ‘μΈμ€κ° λͺ λ²μ§Έλ‘ μ€νλλμ§ μμλ΄λ©΄ λ©λλ€.
1. μ€ν λκΈ° ν(Queue)μμ λκΈ°μ€μΈ νλ‘μΈμ€ νλλ₯Ό κΊΌλ
λλ€.
2. νμ λκΈ°μ€μΈ νλ‘μΈμ€ μ€ μ°μ μμκ° λ λμ νλ‘μΈμ€κ° μλ€λ©΄ λ°©κΈ κΊΌλΈ νλ‘μΈμ€λ₯Ό λ€μ νμ λ£μ΅λλ€.
3. λ§μ½ κ·Έλ° νλ‘μΈμ€κ° μλ€λ©΄ λ°©κΈ κΊΌλΈ νλ‘μΈμ€λ₯Ό μ€νν©λλ€.
3.1 ν λ² μ€νν νλ‘μΈμ€λ λ€μ νμ λ£μ§ μκ³ κ·Έλλ‘ μ’
λ£λ©λλ€.
μλ₯Ό λ€μ΄ νλ‘μΈμ€ 4κ° [A, B, C, D]κ° μμλλ‘ μ€ν λκΈ° νμ λ€μ΄μκ³ , μ°μ μμκ° [2, 1, 3, 2]λΌλ©΄ [C, D, A, B] μμΌλ‘ μ€ννκ² λ©λλ€.
νμ¬ μ€ν λκΈ° ν(Queue)μ μλ νλ‘μΈμ€μ μ€μλκ° μμλλ‘ λ΄κΈ΄ λ°°μ΄ prioritiesμ, λͺ λ²μ§Έλ‘ μ€νλλμ§ μκ³ μΆμ νλ‘μΈμ€μ μμΉλ₯Ό μλ €μ£Όλ locationμ΄ λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, ν΄λΉ νλ‘μΈμ€κ° λͺ λ²μ§Έλ‘ μ€νλλμ§ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ νμ¬ν
μ
μΆλ ₯ μ
priorities | location | return |
---|---|---|
[2,1,3,2] | 2 | 1 |
[1,1,9,1,1,1] | 0 | 5 |
μ
μΆλ ₯ μ μ€λͺ
μμ #2
λμ νμ΄
#1
package programmers;
import java.util.LinkedList;
import java.util.Queue;
public class Process {
public static int solution(int[] priorities, int location) {
int answer = 0;
Queue<Integer> priorityQueue = new LinkedList<>();
Queue<Integer> locationQueue = new LinkedList<>();
for(int i = 0; i < priorities.length; i++) {
priorityQueue.add(priorities[i]);
locationQueue.add(i);
}
while(! priorityQueue.isEmpty()) {
int currentPriority = priorityQueue.poll();
int currentLocation = locationQueue.poll();
boolean hasHigherPriority = false;
for (int priority : priorityQueue) {
if (priority > currentPriority) {
hasHigherPriority = true;
break;
}
}
if(hasHigherPriority) {
priorityQueue.add(currentPriority);
locationQueue.add(currentLocation);
}else {
System.out.println("currentLocation: "+currentLocation);
answer++;
if(currentLocation == location) {
System.out.println(answer);
return answer;
}
}
}
return -1;
}
public static void main(String[] args) {
int[] priorities = new int[] {1,1,9,1,1,1};
solution(priorities, 0);
}
}
λμ μκ°
λ κ°μ ν (priorityQueue
,locationQueue
)λ₯Ό μμ±
priorityQueue
λ νλ‘μΈμ€μ μ°μ μμλ₯Ό μ μ₯locationQueue
λ νλ‘μΈμ€μ μμΉλ₯Ό μ μ₯λͺ¨λ μ°μ μμμ μμΉλ₯Ό ν΄λΉ νμ μΆκ°
priorityQueue
κ° λΉ λκΉμ§ μλμ λμμ λ°λ³΅
answer
κ°μ 1 μ¦κ°μν€κ³ , νμ¬ νλ‘μΈμ€μ μμΉκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ location
κ³Ό μΌμΉνλ©΄ answer
μ λ°νpriorities = {1,1,9,1,1,1}
priorityQueue = {1,1,9,1,1,1}
locationQueue = {0,1,2,3,4,5}
location = 0
answer = 0
1. 첫 λ²μ§Έ λ°λ³΅ :
- νμ¬ νλ‘μΈμ€ μ°μ μμλ 1, μμΉλ 0
- ν λ΄μ μ°μ μμ 9κ° μμΌλ―λ‘ νμ¬ νλ‘μΈμ€λ₯Ό νμ 맨 λ€λ‘ λ€μ λ£μ
priorityQueue = {1,9,1,1,1,1}
locationQueue = {1,2,3,4,5,0}
2. λ λ²μ§Έ λ°λ³΅ :
- νμ¬ νλ‘μΈμ€ μ°μ μμλ 1, μμΉλ 1
- μ°μ μμ 9κ° μμΌλ―λ‘ νμ¬ νλ‘μΈμ€λ₯Ό νμ 맨 λ€λ‘ λ€μ λ£μ
priorityQueue = {9,1,1,1,1,1}
locationQueue = {2,3,4,5,0,1}
3. μΈ λ²μ§Έ λ°λ³΅ :
- νμ¬ νλ‘μΈμ€ μ°μ μμλ 9, μμΉλ 2
- μ΄κ²μ κ°μ₯ λμ μ°μ μμλ₯Ό κ°μ§ νλ‘μΈμ€μ΄λ―λ‘ answerμ 1 μ¦κ°μν΄
priorityQueue = {1,1,1,1,1}
locationQueue = {3,4,5,0,1}
4. λ€ λ²μ§Έ λ°λ³΅ :
- νμ¬ νλ‘μΈμ€ μ°μ μμλ 1, μμΉλ 3
- μ°μ μμ 1μ νμ¬ κ°μ₯ λμ μ°μ μμμ΄λ―λ‘ μ²λ¦¬λ¨ (answer = 2)
priorityQueue = {1,1,1,1}
locationQueue = {4,5,0,1}
5. λ€μ― λ²μ§Έ λ°λ³΅ :
- νμ¬ νλ‘μΈμ€ μ°μ μμλ 1, μμΉλ 4
- μ°μ μμ 1μ νμ¬ κ°μ₯ λμ μ°μ μμμ΄λ―λ‘ μ²λ¦¬λ¨ (answer = 3)
priorityQueue = {1,1,1}
locationQueue = {5,0,1}
6. μ¬μ― λ²μ§Έ λ°λ³΅ :
- νμ¬ νλ‘μΈμ€ μ°μ μμλ 1, μμΉλ 5
- μ°μ μμ 1μ νμ¬ κ°μ₯ λμ μ°μ μμμ΄λ―λ‘ μ²λ¦¬λ¨ (answer = 4)
priorityQueue = {1,1}
locationQueue = {0,1}
7. μΌκ³± λ²μ§Έ λ°λ³΅ :
- νμ¬ νλ‘μΈμ€ μ°μ μμλ 1, μμΉλ 0 β (location = 0 κ³Ό μΌμΉ)
- μ°μ μμ 1μ νμ¬ κ°μ₯ λμ μ°μ μμμ΄λ―λ‘ μ²λ¦¬λ¨ (answer = 5)
priorityQueue = {1}
locationQueue = {1}
8. μ¬λ λ²μ§Έ λ°λ³΅ :
- νμ¬ νλ‘μΈμ€ μ°μ μμλ 1, μμΉλ 1
- μ°μ μμ 1μ νμ¬ κ°μ₯ λμ μ°μ μμμ΄λ―λ‘ μ²λ¦¬λ¨
- priorityQueueλ λΉμ΄μμ
π λ¬Έ4) μ¬λ¬ μΈλ‘ μ¬μμ μμμ§λ λ΄μ€, νΉν μλ³΄μ± λ΄μ€λ₯Ό 보면 λΉμ·λΉμ·ν μ λͺ©μ κΈ°μ¬κ° λ§μ μ μ νμν κΈ°μ¬λ₯Ό μ°ΎκΈ°κ° μ΄λ ΅λ€. Daum λ΄μ€μ κ°λ° μ 무λ₯Ό λ§‘κ² λ μ μ μ¬μ νλΈλ μ¬μ©μλ€μ΄ νΈλ¦¬νκ² λ€μν λ΄μ€λ₯Ό μ°Ύμλ³Ό μ μλλ‘ λ¬Έμ μ μ κ°μ νλ μ 무λ₯Ό λ§‘κ² λμλ€.
κ°λ°μ λ°©ν₯μ μ‘κΈ° μν΄ νλΈλ μ°μ μ΅κ·Ό νμ κ° λκ³ μλ "μΉ΄μΉ΄μ€ μ μ κ°λ°μ 곡μ±" κ΄λ ¨ κΈ°μ¬λ₯Ό κ²μν΄λ³΄μλ€.
κΈ°μ¬μ μ λͺ©μ κΈ°μ€μΌλ‘ "λΈλΌμΈλ μ ν"μ μ£Όλͺ©νλ κΈ°μ¬μ "μ½λ© ν μ€νΈ"μ μ£Όλͺ©νλ κΈ°μ¬λ‘ λλλ κ±Έ λ°κ²¬νλ€. νλΈλ μ΄λ€μ κ°κ° λ¬Άμ΄μ 보μ¬μ£Όλ©΄ μΉ΄μΉ΄μ€ κ³΅μ± κ΄λ ¨ κΈ°μ¬λ₯Ό μ°Ύμ보λ μ¬μ©μμκ² μ μ©ν λ―μΆμλ€.
μ μ¬ν κΈ°μ¬λ₯Ό λ¬Άλ κΈ°μ€μ μ νκΈ° μν΄μ λ Όλ¬Έκ³Ό μλ£λ₯Ό μ‘°μ¬νλ νλΈλ "μμΉ΄λ μ μ¬λ"λΌλ λ°©λ²μ μ°Ύμλλ€.
μμΉ΄λ μ μ¬λλ μ§ν© κ°μ μ μ¬λλ₯Ό κ²μ¬νλ μ¬λ¬ λ°©λ² μ€μ νλλ‘ μλ €μ Έ μλ€. λ μ§ν© A, B μ¬μ΄μ μμΉ΄λ μ μ¬λ J(A, B)λ λ μ§ν©μ κ΅μ§ν© ν¬κΈ°λ₯Ό λ μ§ν©μ ν©μ§ν© ν¬κΈ°λ‘ λλ κ°μΌλ‘ μ μλλ€.
μλ₯Ό λ€μ΄ μ§ν© A = {1, 2, 3}, μ§ν© B = {2, 3, 4}λΌκ³ ν λ, κ΅μ§ν© A β© B = {2, 3}, ν©μ§ν© A βͺ B = {1, 2, 3, 4}μ΄ λλ―λ‘, μ§ν© A, B μ¬μ΄μ μμΉ΄λ μ μ¬λ J(A, B) = 2/4 = 0.5κ° λλ€. μ§ν© Aμ μ§ν© Bκ° λͺ¨λ 곡μ§ν©μΌ κ²½μ°μλ λλμ μ΄ μ μλμ§ μμΌλ λ°λ‘ J(A, B) = 1λ‘ μ μνλ€.
μμΉ΄λ μ μ¬λλ μμμ μ€λ³΅μ νμ©νλ λ€μ€μ§ν©μ λν΄μ νμ₯ν μ μλ€. λ€μ€μ§ν© Aλ μμ "1"μ 3κ° κ°μ§κ³ μκ³ , λ€μ€μ§ν© Bλ μμ "1"μ 5κ° κ°μ§κ³ μλ€κ³ νμ. μ΄ λ€μ€μ§ν©μ κ΅μ§ν© A β© Bλ μμ "1"μ min(3, 5)μΈ 3κ°, ν©μ§ν© A βͺ Bλ μμ "1"μ max(3, 5)μΈ 5κ° κ°μ§κ² λλ€. λ€μ€μ§ν© A = {1, 1, 2, 2, 3}, λ€μ€μ§ν© B = {1, 2, 2, 4, 5}λΌκ³ νλ©΄, κ΅μ§ν© A β© B = {1, 2, 2}, ν©μ§ν© A βͺ B = {1, 1, 2, 2, 3, 4, 5}κ° λλ―λ‘, μμΉ΄λ μ μ¬λ J(A, B) = 3/7, μ½ 0.42κ° λλ€.
μ΄λ₯Ό μ΄μ©νμ¬ λ¬Έμμ΄ μ¬μ΄μ μ μ¬λλ₯Ό κ³μ°νλλ° μ΄μ©ν μ μλ€. λ¬Έμμ΄ "FRANCE"μ "FRENCH"κ° μ£Όμ΄μ‘μ λ, μ΄λ₯Ό λ κΈμμ© λμ΄μ λ€μ€μ§ν©μ λ§λ€ μ μλ€. κ°κ° {FR, RA, AN, NC, CE}, {FR, RE, EN, NC, CH}κ° λλ©°, κ΅μ§ν©μ {FR, NC}, ν©μ§ν©μ {FR, RA, AN, NC, CE, RE, EN, CH}κ° λλ―λ‘, λ λ¬Έμμ΄ μ¬μ΄μ μμΉ΄λ μ μ¬λ J("FRANCE", "FRENCH") = 2/8 = 0.25κ° λλ€.
μ
λ ₯ νμ
μΆλ ₯ νμ
μμ μ
μΆλ ₯
str1 | str2 | answer |
---|---|---|
FRANCE | french | 16384 |
handshake | shake hands | 65536 |
aa1+aa2 | AAAA12 | 43690 |
E=M*C^2 | e=m*c^2 | 65536 |
λμ νμ΄
package programmers;
import java.util.ArrayList;
public class Clustering {
public static int solution(String str1, String str2) {
int answer = 1;
str1 = str1.toLowerCase();
str2 = str2.toLowerCase();
ArrayList<String> set1 = new ArrayList<>();
ArrayList<String> set2 = new ArrayList<>();
int legnthA = str1.length();
int legnthB = str2.length();
for(int i = 0; i < legnthA - 1; i++) {
String subString = str1.substring(i, i+2);
if(subString.matches("[a-z]{2}")) {
set1.add(subString);
}
}
for(int i = 0; i < legnthB - 1; i++) {
String subString = str2.substring(i, i+2);
if(subString.matches("[a-z]{2}")) {
set2.add(subString);
}
}
double union = set1.size() + set2.size();
double intersection = 0;
if(!set1.isEmpty() || !set2.isEmpty()) {
for(String s : set1) {
if(set2.contains(s)) {
intersection++;
set2.remove(s);
}
}
union -= intersection;
}
if(set1.isEmpty() && set2.isEmpty()) {
answer *= 65536;
}else {
double a = (intersection / union ) ;
answer = (int) (a * 65536);
}
return answer;
}
public static void main(String[] args) {
solution("E=M*C^2", "e=m*c^2");
}
}
λμ μκ°
λ¬Έμ λ₯Ό νμ ν΄λ³΄λ©΄
String str1 = "FRANCE";
String str2 = "french";
μΌλ
[fr, ra, an, nc, ce]
[fr, re, en, nc, ch]
μ΄λ κ² λλμ΄ μ§κ³ , str1 & str2μ ν©μ§ν© : [fr,ra,re,an,en,nc,ce,ch]
str1 & str2μ κ΅μ§ν© : [fr, nc] κ° λμ΄ μ΄λμ μ μ¬λλ₯Ό 2/8 = 0.25κ° λλ€.
μ¬κΈ°μ νΉμλ¬Έμ, μ«μ, 곡백μ ν¬ν¨ν λ¬Έμμ΄λ©΄ λ¬Έμμ΄μ μΆκ°νμ§ μλλ€.
λ΄κ° ꡬμ±ν λ‘μ§μ μ΄ν΄λ³΄λ©΄ λ§€κ°λ³μλ‘ μ£Όμ΄μ§λ str1, str2λ₯Ό λλ¬Έμλ μλ¬Έμλ λͺ¨λ λ¬Έμλ₯Ό μλ¬Έμλ‘ λ³ννλ€.
str1 = str1.toLowerCase();
str2 = str2.toLowerCase();
κ·Έλ¦¬κ³ μ΄ λ¬Έμλ₯Ό 리μ€νΈμ μ½κ² μ μ₯νκ³ , μ κ±°νκΈ° μν ArrayList
κ° νμνλ€. ν΅μ¬ λ‘μ§μ μ΄ν΄λ³΄λ©΄ λ€μκ³Ό κ°λ€.
for(int i = 0; i < legnthA - 1; i++) {
String subString = str1.substring(i, i+2);
if(subString.matches("[a-z]{2}")) {
set1.add(subString);
}
}
String subString = str.substring(i, i+2);
λ forλ¬Έ μνλ₯Ό ν΅ν΄ λ¬Έμλ₯Ό λκΈμμ© μλ₯΄κ³ , matches()
λ νμΈνλ €λ ν¨ν΄μ μ κ· ννμκ³Ό μΌμΉνλμ§ νλ³νλ λ©μλλ‘
"[a-z]{2}"
λ₯Ό λΆμνλ©΄
[a-z] : μλ¬Έμ μνλ²³ μ€ νλμ μΌμΉν¨
{2} : λ°λ‘ μμ ν¨ν΄μ΄ μ νν 2λ² λ°λ³΅λ¨μ μλ―Έ
μ¦, μλ¬Έμ μνλ²³μ΄ 2λ² λ°λ³΅λμ΄μΌ ν¨μ μλ―Έ
"ab" -> true
"aB" -> false
"abc" -> false
"1a" -> false
κ·Έλ¦¬κ³ μ΄λ κ² ν¨ν΄μ ν΅κ³Όν λ¬Έμλ§μ΄ List
μ μ μ₯λλ€. λλ¨Έμ§ λ‘μ§μ 보면
double union = set1.size() + set2.size();
double intersection = 0;
if(!set1.isEmpty() || !set2.isEmpty()) {
for(String s : set1) {
if(set2.contains(s)) {
intersection++;
set2.remove(s);
}
}
union -= intersection;
}
if(set1.isEmpty() && set2.isEmpty()) {
answer *= 65536;
}else {
double a = (intersection / union ) ;
answer = (int) (a * 65536);
}
ν©μ§ν©μ set1, set2 μ ν©μμ κ΅μ§ν©μ λΊ κ°μ΄κ³ , κ΅μ§ν©μ set1,set2μ 곡ν΅λ κ°μ μλ―Ένλ€.
if(!set1.isEmpty() || !set2.isEmpty())
μ‘°κ±΄μ΄ νμν μ΄μ λ λ μ€ νλλΌλ 곡μ§ν©μ΄ μλ κ²½μ°λ₯Ό κ²μ¬νλ κ²μΌλ‘ λ λ¬Έμμ΄μμ λͺ¨λ μλ¬Έμμ μ°μλ λ κΈμ μμ νλ μ΄μ λ°κ²¬ν κ²½μ°μ΄λ€.
set1
μ μλ κ° μμκ° set2
μλ μλμ§ νμΈνλ €λ©΄, λ μ§ν© μ€ μ μ΄λ νλκ° λΉμ΄ μμ§ μμμΌνλ€. λΉμ΄μλ κ²½μ° κ΅μ§ν©μ νμ 곡μ§ν©μ΄λ―λ‘, κ΅μ§ν©μ κ³μ°ν νμκ° μμunion
)μμ κ΅μ§ν©μ ν¬κΈ°(intersection
)λ₯Ό λΉΌλ μ°μ°μ λ μ§ν© μ€ νλλΌλ λΉμ΄ μμ§ μμ κ²½μ°μλ§ μλ―Έκ° μμπ λ¬Έ5) XXκ²μμλ νΌλ‘λ μμ€ν (0 μ΄μμ μ μλ‘ ννν©λλ€)μ΄ μμΌλ©°, μΌμ νΌλ‘λλ₯Ό μ¬μ©ν΄μ λμ μ ννν μ μμ΅λλ€. μ΄λ, κ° λμ λ§λ€ ννμ μμνκΈ° μν΄ νμν "μ΅μ νμ νΌλ‘λ"μ λμ ννμ λ§μ³€μ λ μλͺ¨λλ "μλͺ¨ νΌλ‘λ"κ° μμ΅λλ€. "μ΅μ νμ νΌλ‘λ"λ ν΄λΉ λμ μ νννκΈ° μν΄ κ°μ§κ³ μμ΄μΌ νλ μ΅μνμ νΌλ‘λλ₯Ό λνλ΄λ©°, "μλͺ¨ νΌλ‘λ"λ λμ μ ννν ν μλͺ¨λλ νΌλ‘λλ₯Ό λνλ λλ€. μλ₯Ό λ€μ΄ "μ΅μ νμ νΌλ‘λ"κ° 80, "μλͺ¨ νΌλ‘λ"κ° 20μΈ λμ μ νννκΈ° μν΄μλ μ μ μ νμ¬ λ¨μ νΌλ‘λλ 80 μ΄μ μ΄μ΄μΌ νλ©°, λμ μ ννν νμλ νΌλ‘λ 20μ΄ μλͺ¨λ©λλ€.
μ΄ κ²μμλ ν루μ ν λ²μ© ννν μ μλ λμ μ΄ μ¬λ¬κ° μλλ°, ν μ μ κ° μ€λ μ΄ λμ λ€μ μ΅λν λ§μ΄ νννλ € ν©λλ€. μ μ μ νμ¬ νΌλ‘λ kμ κ° λμ λ³ "μ΅μ νμ νΌλ‘λ", "μλͺ¨ νΌλ‘λ"κ° λ΄κΈ΄ 2μ°¨μ λ°°μ΄ dungeons κ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, μ μ κ° ννν μ μλ μ΅λ λμ μλ₯Ό return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ νμ¬ν
μ
μΆλ ₯ μ
k | dungeons | result |
---|---|---|
80 | [[80,20],[50,40],[30,10]] | 3 |
μ
μΆλ ₯ μ μ€λͺ
νμ¬ νΌλ‘λλ 80μ λλ€.
λ§μ½, 첫 λ²μ§Έ β λ λ²μ§Έ β μΈ λ²μ§Έ λμ μμλ‘ νννλ€λ©΄
λ§μ½, 첫 λ²μ§Έ β μΈ λ²μ§Έ β λ λ²μ§Έ λμ μμλ‘ νννλ€λ©΄
λ°λΌμ μ΄ κ²½μ° μΈ λμ μ λͺ¨λ ννν μ μμΌλ©°, μ μ κ° ννν μ μλ μ΅λ λμ μλ 3μ λλ€.
λμ νμ΄
package programmers;
public class FatiqueLevel {
public static int solution(int k, int[][] dungeons) {
boolean[] visited = new boolean[dungeons.length];
return dfs(0, k, dungeons, visited);
}
public static int dfs(int depth, int fatigue, int[][] dungeons, boolean[] visited) {
int maxDepth = depth;
for(int i = 0; i < dungeons.length; i++) {
if(!visited[i] && dungeons[i][0] <= fatigue) {
visited[i] = true;
maxDepth = Math.max(maxDepth, dfs(depth + 1, fatigue - dungeons[i][1], dungeons, visited));
visited[i] = false;
}
}
return maxDepth;
}
public static void main(String[] args) {
int[][] dungeons = {{80,20},{50,40},{30,10}};
solution(80, dungeons);
}
}
DFS(Depth First Search) νμ΄
1. μ΄κΈ°μν
- fatigue = 80
- dungeons = {{80,20},{50,40},{30,10}}
- visited = {false,false,false} (λ°©λ¬Έμ μν)
2. 첫 λ²μ§Έ λμ μ λν DFS
- 첫λ²μ§Έ λμ μ μꡬ νΌλ‘λ : 80, νμ¬ νΌλ‘λ 80 (νν κ°λ₯)
- depthκ° 1μ¦κ°, fatigueλ 20 κ°μν΄μ 60
- μ΄μ λ λ²μ§Έ λμ μ λ°©λ¬ΈνκΈ° μν΄ λ€μ dfs ν¨μλ₯Ό νΈμΆ
3. λ λ²μ§Έ λμ μ λν DFS
- λ λ²μ¨° λμ μ μꡬ νΌλ‘λ: 50, νμ¬ νΌλ‘λ 60 (νν κ°λ₯)
- depthκ° 1 μ¦κ°ν΄μ 2κ°λ¨, fatigueλ 40κ°μν΄μ 20
- μ΄μ μΈ λ²μ§Έ λμ μ λ°©λ¬ΈνκΈ° μν΄ λ€μ dfs ν¨μλ₯Ό νΈμΆ
4. μΈ λ²μ§Έ λμ μ λν DFS
- μΈ λ²μ§Έ λμ μ μꡬ νΌλ‘λ: 30, νμ¬ νΌλ‘λ 20 (νν λΆκ°λ₯)
- μΈ λ²μ§Έ λμ μ ννν μ μμΌλ―λ‘, μ΄μ μνλ‘ λμκ°μΌν¨
- λ°λΌμ visited λ°°μ΄μμ λ λ²μ§Έ λμ μ λν λ°©λ¬Έ μνλ₯Ό ν΄μ
5. λ€μ λ λ²μ§Έ λμ μ λν DFS
- μ΄λ²μλ μΈ λ²μ§Έ λμ μ λ°©λ¬ΈνκΈ° μν΄ dfs ν¨μλ₯Ό νΈμΆ
- νμ§λ§ μμμ μΈ λ²μ§Έ λμ μ ννν μ μμμ μκ³ μκΈ° λλ¬Έμ, μ΄λ²μλ μΈ λ²μ§Έ λμ μ ννν μ μμ
- λ°λΌμ visited λ°°μ΄μμ 첫 λ²μ§Έ λμ μ λν λ°©λ¬Έ μνλ₯Ό ν΄μ
6. 첫 λ²μ§Έ λμ μ λν DFS
- μ΄λ²μλ λ λ²μ§Έ λμ μ 건λλ°κ³ λ°λ‘ μΈ λ²μ§Έ λμ μ λ°©λ¬ΈνκΈ° μν΄ dfs ν¨μλ₯Ό νΈμΆ
- κ·Έλ¬λ, νμ¬μ νΌλ‘λλ 60μΈλ°, μΈ λ²μ¨° λμ μ μꡬ νΌλ‘λλ 30μ΄κΈ° λλ¬Έμ ννν μ μμ
- λ°λΌμ, depthλ₯Ό 1μ¦κ°μν€κ³ , fatigueλ₯Ό 10 κ°μμν΄