** π# 1λ¨κ³ λ³Έλ¬Έ: λ°°μ΄ μμ± λ° μ΄κΈ°ν**
1. λ°°μ΄μ΄λ?
- *λ°°μ΄(Array)μ **κ°μ νμ μ μ¬λ¬ κ°μ νλλ‘ λ¬Άμ΄μ μ μ₯νλ κ·Έλ¦μ λλ€.
- μλ₯Ό λ€μ΄, 1λΆν° 45κΉμ§μ μ«μλ₯Ό νλμ λ°°μ΄μ μμλλ‘ μ μ₯ν μ μμ΅λλ€.
- λ³μλ νλμ κ°λ§ μ μ₯ν μ μμ§λ§,
- λ°°μ΄μ μ¬λ¬ κ°μ κ°μ μ°μν΄μ μ μ₯ν μ μμ΅λλ€.
λ°°μ΄μ νΉμ§ μμ½
- κ°μ νμ μ λ°μ΄ν°λ§ μ μ₯ν μ μμ΅λλ€.
- *μΈλ±μ€(Index)λ‘ **μμΉλ₯Ό νμν©λλ€.
- μΈλ±μ€λ 0λΆν° μμν©λλ€.
- μ: 첫 λ²μ§Έ κ° β
λ°°μ΄[0]
, λ λ²μ§Έ κ° βλ°°μ΄[1]
- ν¬κΈ°κ° κ³ μ λμ΄ μμΌλ©°, ν λ² μμ±νλ©΄ ν¬κΈ°λ₯Ό λ³κ²½ν μ μμ΅λλ€.
πΉ λΉμ : μ°μ²΄κ΅ μ¬μν¨
- λ°°μ΄μ μ¬λ¬ κ°μ μ°μ²΄κ΅ μ¬μν¨κ³Ό κ°μΌλ©°,
- *κ° μΉΈμλ λ²νΈ(μΈλ±μ€)**κ° μ ν μμ΅λλ€.
- *1λ² μΉΈ, 2λ² μΉΈ, 3λ² μΉΈβ¦μ²λΌ **μμλλ‘ λ²νΈκ° λΆμ΄ μμ
2. λ°°μ΄ μμ±νκΈ°
- 1λΆν° 45κΉμ§μ μ«μλ₯Ό μ μ₯ν λ°°μ΄μ μμ±ν©λλ€.
- 6κ°μ λ‘λ λ²νΈλ₯Ό μ μ₯ν λ°°μ΄λ μμ±ν©λλ€.
int[] balls = new int[45]; // 1~45 μ«μλ₯Ό μ μ₯ν λ°°μ΄
int[] lotto = new int[6]; // μμΈ λ²νΈ μ€ 6κ° μ μ₯
balls[]
λ°°μ΄μλ 1λΆν° 45κΉμ§μ μ«μκ° μμλλ‘ μ μ₯λ©λλ€.lotto[]
λ°°μ΄μλ μμΈ λ²νΈ μ€ 6κ°κ° μ μ₯λ©λλ€.- λ°°μ΄ μμ± λ°©λ²:
- νμ [] λ°°μ΄μ΄λ¦ = new νμ [ν¬κΈ°];
int[] balls = new int[45];
λint
νμ μ 45κ° κ³΅κ°μ κ°μ§ λ°°μ΄μ λ§λλλ€.- κ° κ³΅κ°μλ κΈ°λ³Έκ°μΈ
0
μ΄ λ€μ΄κ°λλ€.
πΉ λΉμ : λ²νΈν ν΅ λ§λ€κΈ°
balls[]
λ 1λΆν° 45κΉμ§μ λ²νΈνκ° λ€μ΄μλ ν΅lotto[]
λ λ½ν λ²νΈν 6κ°λ₯Ό λ£λ λ°κ΅¬λ
3. λ°°μ΄ μ΄κΈ°ννκΈ°
balls[]
λ°°μ΄μ 1λΆν° 45κΉμ§μ μ«μλ₯Ό μμλλ‘ λ£μ΅λλ€.- λ°°μ΄μ κ°μ λ£λ κ²μ λ°°μ΄ μ΄κΈ°νλΌκ³ ν©λλ€.
for (int i = 0; i < balls.length; i++) {
balls[i] = i + 1;
}
i
λ 0λΆν° 44κΉμ§ λ°λ³΅νλ©°,balls[i]
μi + 1
κ°μ λ£μ΅λλ€.balls[0]
= 1balls[1]
= 2- β¦
balls[44]
= 45
πΉ λΉμ : λ²νΈν λ§λ€κΈ°
- 45κ°μ λΉ λ²νΈνμ 1λ²λΆν° 45λ²κΉμ§ λ²νΈλ₯Ό μ λ κ³Όμ
- *첫 λ²μ§Έ λ²νΈν(0λ² μΉΈ)μλ **1λ²μ μ κ³ ,
- *λ λ²μ§Έ λ²νΈν(1λ² μΉΈ)μλ **2λ²μ μ μ
- *λ§μ§λ§ λ²νΈν(44λ² μΉΈ)μλ **45λ²μ μ μ
4. λ°°μ΄ μ΄κΈ°νμ μ 체 νλ¦
balls[]
λ°°μ΄μ μμ±ν©λλ€. (int[] balls = new int[45];
)for
λ¬Έμ μ¬μ©νμ¬balls[]
λ°°μ΄μ μ΄κΈ°νν©λλ€.- 1λΆν° 45κΉμ§μ μ«μκ° μμλλ‘ μ μ₯λ©λλ€.
μ 체 μ½λ
int[] balls = new int[45];
for (int i = 0; i < balls.length; i++) {
balls[i] = i + 1;
}
balls[]
λ°°μ΄μλ 1λΆν° 45κΉμ§μ μ«μκ° μμλλ‘ μ μ₯λ©λλ€.- κ° μΉΈμλ λ²νΈνκ° μ°¨λ‘λλ‘ λ€μ΄κ°λλ€.
πΉ λΉμ : λ²νΈν ν΅ μ€λΉνκΈ°
- λΉμ΄ μλ ν΅(
balls[]
)μ 1λ²λΆν° 45λ²κΉμ§ λ²νΈνλ₯Ό μ°¨λ‘λλ‘ λ£μ - 첫 λ²μ§Έ μΉΈμλ 1λ² λ²νΈνκ°,
- λ λ²μ§Έ μΉΈμλ 2λ² λ²νΈνκ° λ€μ΄κ°
- λ§μ§λ§ μΉΈμλ 45λ² λ²νΈνκ° λ€μ΄κ°
5. κΈ°μ λ©΄μ λλΉ μμ½
- λ°°μ΄(Array): κ°μ νμ μ μ¬λ¬ κ°μ μμλλ‘ μ μ₯
- λ°°μ΄ μμ± λ°©λ²:
νμ [] λ°°μ΄μ΄λ¦ = new νμ [ν¬κΈ°];
- μ:
int[] balls = new int[45];
- λ°°μ΄ μ΄κΈ°ν:
for
λ¬Έμ μ¬μ©νμ¬ μμλλ‘ κ° λ£κΈ°- μ:
balls[i] = i + 1;
- μΈλ±μ€λ 0λΆν° μμνλ©°,
balls[0]
= 1,balls[1]
= 2, β¦,balls[44]
= 45
- 1λΆν° 45κΉμ§ λ°°μ΄ μ΄κΈ°νλ λ‘λ λ²νΈ μμ±μ 첫 λ¨κ³
- λ°°μ΄ μ΄κΈ°νμ μ±λ₯ μ΅μ ν:
for
λ¬Έμ κ°μ₯ λΉ λ₯΄κ³ ν¨μ¨μ μΈ μ΄κΈ°ν λ°©λ²- λ©λͺ¨λ¦¬ μ¬μ©λμ μ΅μννκ³ μλλ λΉ λ¦
π νλμ 보λ μμ½
- λ°°μ΄(Array): κ°μ νμ μ μ¬λ¬ κ°μ μμλλ‘ μ μ₯
- λ°°μ΄ μμ±:
int[] balls = new int[45];
- λ°°μ΄ μ΄κΈ°ν:
balls[i] = i + 1;
- λ°°μ΄μ μΈλ±μ€λ 0λΆν° μμ
for
λ¬Έμ μ¬μ©νμ¬ μμλλ‘ κ°μ λ£μ- λ‘λ λ²νΈ μμ±μ 첫 λ¨κ³λ 1λΆν° 45κΉμ§ λ°°μ΄ μ΄κΈ°ν
π 2λ¨κ³ λ³Έλ¬Έ: λ°°μ΄ μκΈ° (λλ€ μ ν)
1. λ°°μ΄ μκΈ°(λλ€ μ ν)μ νμμ±
- λ‘λ λ²νΈλ 무μμ(Random)λ‘ μμ¬μΌ ν©λλ€.
- 1λΆν° 45κΉμ§μ μ«μκ° μμλλ‘ μμΌλ©΄
- μ:
1, 2, 3, 4, 5, 6
- μ:
- 곡μ ν μΆμ²¨μ΄ μλλ―λ‘
- μ«μμ μμλ₯Ό λλ€νκ² μμ΄μΌ λ‘λ λ²νΈκ° 곡μ νκ² λ½νλλ€.
λ°°μ΄ μκΈ°μ λͺ©μ μμ½
- 곡μ ν μΆμ²¨μ μν΄ μμλ₯Ό 무μμ(Random)λ‘ λ³κ²½
- μ€λ³΅ μμ΄ 1λΆν° 45κΉμ§μ μ«μλ₯Ό 무μμλ‘ μμ
- μμΈ μ«μ μ€ μ 6κ°λ₯Ό μ ννμ¬ λ‘λ λ²νΈλ‘ μ¬μ©
πΉ λΉμ : 곡 λ€μκΈ°
- 1λ²λΆν° 45λ²κΉμ§ μ ν κ³΅μ΄ μμλλ‘ μλ μν
- 곡μ νκ² μΆμ²¨νκΈ° μν΄ κ³΅μ 무μμλ‘ μμ΄μΌ ν¨
- 곡μ μΆ©λΆν μμ ν μμͺ½μμ 6κ°λ₯Ό λ½μ
2. λλ€ μκΈ° μκ³ λ¦¬μ¦ (Swap λ°©μ)
- λλ€ν μμΉμ μ«μ 2κ°λ₯Ό κ΅ν(Swap)νλ©΄μ λ°°μ΄μ μμ΅λλ€.
- 1000λ² λ°λ³΅νμ¬ λ°°μ΄μ΄ μΆ©λΆν μμ΄λλ‘ ν©λλ€.
λλ€ μκΈ° μ½λ λΆμ
for (int i = 0; i < 1000; i++) {
int f = (int)(Math.random() * 45);
int t = (int)(Math.random() * 45);
int tmp = balls[f];
balls[f] = balls[t];
balls[t] = tmp;
}
μ€λͺ
-
λλ€ μΈλ±μ€ μμ±
int f = (int)(Math.random() * 45); int t = (int)(Math.random() * 45);
Math.random()
μ 0.0 μ΄μ 1.0 λ―Έλ§μ μ€μλ₯Ό μμ±ν©λλ€.Math.random() * 45
λ 0 μ΄μ 45 λ―Έλ§μ μ€μκ° λ©λλ€.(int)
λ‘ μ μν λ³ννλ©΄ 0λΆν° 44 μ¬μ΄μ λλ€ν μ μκ° λμ΅λλ€.- *λλ€νκ² λ½μ λ μμΉ(
f
μt
)μ κ°μ **μλ‘ κ΅ν(Swap) ν©λλ€.
-
λ μμΉμ κ°μ κ΅ν(Swap)
int tmp = balls[f]; balls[f] = balls[t]; balls[t] = tmp;
- *μμ λ³μ(
tmp
)λ₯Ό μ¬μ©νμ¬ **λ μμΉμ κ°μ κ΅ν(Swap) ν©λλ€. - μ:
balls[3]
κ³Όballs[7]
μ κ΅νν λtmp
μballs[3]
κ°μ μ μ₯balls[3]
μballs[7]
κ°μ λ£μballs[7]
μtmp
κ°μ λ£μ
- λ μμΉμ κ°μ΄ λ°λλ©΄μ λ°°μ΄μ΄ 무μμλ‘ μμ
- *μμ λ³μ(
πΉ λΉμ : μΉ΄λ μκΈ°
- λλ€νκ² λ½μ λ μ₯μ μΉ΄λλ₯Ό μμΉλ₯Ό λ°κΏ
- μ΄ μμ μ μ¬λ¬ λ² λ°λ³΅νλ©΄μ μΉ΄λ μμκ° λ¬΄μμκ° λ¨
- 1000λ² λ°λ³΅νλ©΄μ μΆ©λΆν μμ΄λλ‘ ν¨
3. 1000λ² λ°λ³΅μ μλ―Έ
- 1000λ² λ°λ³΅μ λ°°μ΄μ΄ μΆ©λΆν μμ΄λλ‘ λ³΄μ₯νκΈ° μν¨μ λλ€.
- λλ€ν μμΉμμ λ μ«μλ₯Ό Swapνλ©΄μ
- λ°°μ΄μ΄ μ μ 무μμ μνλ‘ λ³ν©λλ€.
- νμ§λ§, λ°λ³΅ νμλ κ²½νμ μΈ κ°μ΄λ©°,
- λ°°μ΄ ν¬κΈ°(45)μ λΉν΄ λΉν¨μ¨μ μΌ μ μμ΅λλ€.
- λ ν¨μ¨μ μΈ μκ³ λ¦¬μ¦μΈ Fisher-Yates μκ³ λ¦¬μ¦μ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.
4. λλ€ μ νμ λΉν¨μ¨μ± λ° κ°μ μ
λΉν¨μ¨μ μΈ μ
- λλ€νκ² λ μμΉλ₯Ό μ ννκ³ κ΅ννλ λ°©μμ
- μ€λ³΅λ μμΉκ° μ¬λ¬ λ² μ νλ μ μμ
- μ:
balls[3]
κ³Όballs[3]
μ Swapνλ©΄ λ³νκ° μμ - λλ€ μΈλ±μ€λ₯Ό μ€λ³΅ μμ΄ μ ννλ κ²μ΄ ν¨μ¨μ μ λλ€.
κ°μ μ : Fisher-Yates μκ³ λ¦¬μ¦
- Fisher-Yates μκ³ λ¦¬μ¦μ κ°μ₯ ν¨μ¨μ μΈ λλ€ μ ν μκ³ λ¦¬μ¦μ λλ€.
- λ€μμλΆν° μμΌλ‘ μ΄λνλ©΄μ
- μ΄μ μμΉ μ€ νλλ₯Ό 무μμλ‘ μ ννμ¬ κ΅νν©λλ€.
- ν λ² μ νλ μμΉλ λ€μ μ νλμ§ μμ β μ€λ³΅ λ°©μ§
- O(N) μκ° λ³΅μ‘λλ‘ νμ¬ λ°©μ(O(N * 1000))λ³΄λ€ λΉ λ¦
Fisher-Yates μκ³ λ¦¬μ¦ μμ
for (int i = balls.length - 1; i > 0; i--) {
int j = (int)(Math.random() * (i + 1));
int tmp = balls[i];
balls[i] = balls[j];
balls[j] = tmp;
}
- λ€μμλΆν° μμΌλ‘ μ΄λνλ©°
- *μ΄μ μμΉ μ€ λλ€ν κ³³(
j
)κ³Ό **κ΅ν - ν λ² μ νλ μμΉλ λ€μ μ νλμ§ μμ
- μ€λ³΅ μμ΄ λλ€νκ² μμ
5. κΈ°μ λ©΄μ λλΉ μμ½
- λλ€ μ ν(Random Shuffle): λ°°μ΄μ μμλ₯Ό 무μμλ‘ λ³κ²½
- Swap μκ³ λ¦¬μ¦: λλ€ν μμΉ 2κ°λ₯Ό μ ννμ¬ κ°μ κ΅ν
- 1000λ² λ°λ³΅νμ¬ λ°°μ΄μ μΆ©λΆν μμ
- λΉν¨μ¨μ μΈ μ :
- μ€λ³΅λ μμΉκ° μ¬λ¬ λ² μ νλ μ μμ
- λ°°μ΄ ν¬κΈ°μ λΉν΄ λ°λ³΅ νμκ° λ무 λ§μ
- κ°μ μ :
- Fisher-Yates μκ³ λ¦¬μ¦ μ¬μ©
- μ€λ³΅ μμ΄ λλ€νκ² μμ
- O(N) μκ° λ³΅μ‘λλ‘ νμ¬ λ°©μ(O(N * 1000))λ³΄λ€ λΉ λ¦
- κΈ°μ λ©΄μ λλΉ ν¬μΈνΈ:
- λλ€ μκ³ λ¦¬μ¦μ ν¨μ¨μ± λΉκ΅
- Swap μκ³ λ¦¬μ¦κ³Ό Fisher-Yates μκ³ λ¦¬μ¦μ μ°¨μ΄μ
- O(N) vs O(N * 1000) μκ° λ³΅μ‘λ μ€λͺ
π νλμ 보λ μμ½
- λλ€ μ ν(Random Shuffle): λ°°μ΄μ 무μμλ‘ μμ
- νμ¬ λ°©μ: λλ€ν μμΉ 2κ°λ₯Ό μ ννμ¬ κ°μ κ΅ν (Swap)
- λ¬Έμ μ : μ€λ³΅λ μμΉκ° μ¬λ¬ λ² μ νλ μ μμ
- κ°μ λ°©λ²: Fisher-Yates μκ³ λ¦¬μ¦
- λ€μμλΆν° μμΌλ‘ μ΄λνλ©° μ€λ³΅ μμ΄ λλ€νκ² μμ
- O(N) μκ° λ³΅μ‘λλ‘ νμ¬ λ°©μλ³΄λ€ ν¨μ¬ λΉ λ¦
ποΈ 3λ¨κ³ λ³Έλ¬Έ: λ‘λ λ²νΈ 6κ° μ ννκΈ°
1. λ‘λ λ²νΈ μ νμ κΈ°λ³Έ κ°λ
- 1λΆν° 45κΉμ§μ μ«μκ° λλ€νκ² μμΈ λ°°μ΄μμ
- μμͺ½ 6κ°μ μ«μλ₯Ό λ‘λ λ²νΈλ‘ μ νν©λλ€.
- μ€λ³΅ μμ΄ 6κ°μ μ«μκ° μ νλ©λλ€.
- μλ κ³Όμ μμ μ€λ³΅μ΄ μ κ±°λλ―λ‘,
- μ€λ³΅ κ²μ¬ μ½λκ° νμνμ§ μμ΅λλ€.
μ μμͺ½ 6κ°λ₯Ό μ νν κΉ?
- λλ€νκ² μμ λ°°μ΄μμ μμͺ½ 6κ°λ₯Ό μ ννλ©΄
- μ΄λ―Έ 무μμ μνμ΄κΈ° λλ¬Έμ 곡μ ν μΆμ²¨μ΄ κ°λ₯ν©λλ€.
- λ€μͺ½ μ«μλ₯Ό μ νν΄λ κ²°κ³Όλ λμΌνμ§λ§,
- μμͺ½ 6κ°λ₯Ό μ ννλ κ²μ΄ μ§κ΄μ μ λλ€.
πΉ λΉμ : 곡 λ½κΈ° ν΅μμ μμͺ½ 곡 6κ° λ½κΈ°
- μμ 곡μμ μμͺ½μ μλ 6κ°λ₯Ό μμλλ‘ λ½μ
- 곡μ μ€λ³΅ μμ΄ 6κ°κ° μ νλ¨
- λ€μͺ½ 곡μ λ½μλ κ²°κ³Όλ κ°μ§λ§,
- μμͺ½ 곡λΆν° λ½λ κ²μ΄ λ μμ°μ€λ¬μ
2. λ°°μ΄μμ 6κ°μ λ²νΈ μ ννκΈ°
- λλ€νκ² μμΈ
balls[]
λ°°μ΄μμ - μ 6κ°λ₯Ό
lotto[]
λ°°μ΄μ μ μ₯ν©λλ€.
μ½λ λΆμ
for (int i = 0; i < lotto.length; i++) {
lotto[i] = balls[i];
}
μ€λͺ
- 6λ² λ°λ³΅νκΈ°
lotto.length
λ 6μ λλ€.- 6λ² λ°λ³΅νλ©΄μ
lotto[0]
λΆν°lotto[5]
κΉμ§ κ°μ λ£μ΅λλ€.
- μμͺ½ 6κ°μ μ«μ μ ννκΈ°
balls[0]
,balls[1]
, β¦,balls[5]
β λλ€νκ² μμΈ λ°°μ΄μμ μ 6κ°λ₯Ό μ ν- balls λ°°μ΄μ μ΄λ―Έ 무μμλ‘ μμμΌλ―λ‘μμͺ½ μ«μ 6κ°κ° λλ€νκ² μ νλ©λλ€.
lotto[]
λ°°μ΄μ μ μ₯νκΈ°lotto[0]
=balls[0]
lotto[1]
=balls[1]
- β¦
lotto[5]
=balls[5]
μμ
// balls[] λ°°μ΄ (λλ€νκ² μμΈ μν)
balls = [33, 7, 22, 1, 19, 44, 10, ... , 15]
// lotto[] λ°°μ΄ (μ 6κ° μ ν ν)
lotto = [33, 7, 22, 1, 19, 44]
- μμΈ λ°°μ΄μ μ 6κ°κ° λ‘λ λ²νΈλ‘ μ νλ©λλ€.
- μ€λ³΅ μμ΄ 6κ°μ μ«μκ° μ νλ©λλ€.
πΉ λΉμ : μμͺ½μμ 6κ° κ³΅ λ½κΈ°
- μμ 곡μμ μμͺ½μ μλ 6κ°λ₯Ό μμλλ‘ λ½μ
- 곡μ μ€λ³΅ μμ΄ 6κ°κ° μ νλ¨
3. μ€λ³΅ κ²μ¬ μμ΄ λ²νΈ μ ννκΈ°
- μ€λ³΅λ λ²νΈκ° μλ μ΄μ λ
- λ°°μ΄μ μλ κ³Όμ μμ μ€λ³΅ μμ΄ λ¬΄μμλ‘ μμκΈ° λλ¬Έμ λλ€.
- λ°°μ΄μ κ°μ μ«μκ° λ λ² λ€μ΄κ°μ§ μμΌλ―λ‘
- μ€λ³΅ κ²μ¬ μμ΄ 6κ°μ μ«μλ₯Ό μ νν μ μμ΅λλ€.
μ€λ³΅ κ²μ¬ μμ΄ κ°λ₯ν μ΄μ μ 리
- λ°°μ΄ μ΄κΈ°ν λ¨κ³
- 1λΆν° 45κΉμ§μ μ«μκ° μ€λ³΅ μμ΄ λ°°μ΄μ μ μ₯λ¨
balls[]
=[1, 2, 3, ... , 45]
- λ°°μ΄ μκΈ° λ¨κ³
- λ°°μ΄μ λλ€νκ² μμ
- νμ§λ§ μ«μλ κ·Έλλ‘ μ‘΄μ¬νλ―λ‘ μ€λ³΅ μμ
- μμͺ½ 6κ° μ ν
- μ€λ³΅ μμ΄ λ¬΄μμλ‘ μμΈ λ°°μ΄μμ
- μ 6κ°λ₯Ό μ ννλ―λ‘ μ€λ³΅μ΄ μμ μ μμ
πΉ λΉμ : λ²νΈν μμλ§ μκΈ°
- 1λ²λΆν° 45λ²κΉμ§ μ ν λ²νΈνκ° μμλ§ λ°λ
- λ²νΈν μ체λ μ€λ³΅λμ§ μμ
- μμͺ½ 6κ°λ₯Ό μ νν΄λ μ€λ³΅λ μ μμ
4. λ€λ₯Έ λ°©λ²κ³Όμ λΉκ΅
νμ¬ λ°©μ: λ°°μ΄ μκΈ° β μ 6κ° μ ν
- μ₯μ :
- λ°°μ΄μ μλ κ³Όμ μμ μ€λ³΅μ΄ μ κ±°λ¨
- μ€λ³΅ κ²μ¬ μ½λκ° νμ μμ
- μ½λκ° κ°κ²°νκ³ μ΄ν΄νκΈ° μ¬μ
- λ¨μ :
- λ°°μ΄μ μλ κ³Όμ μ΄ λΉν¨μ¨μ (Swap λ°©μ β O(N * 1000))
- Fisher-Yates μκ³ λ¦¬μ¦ μ¬μ© μ λ ν¨μ¨μ
λ€λ₯Έ λ°©λ²: Set μλ£κ΅¬μ‘° μ¬μ©νκΈ°
- Setμ μ€λ³΅μ νμ©νμ§ μλ μλ£κ΅¬μ‘°μ λλ€.
- Setμ λλ€ν μ«μλ₯Ό λ£κ³ ,
- 6κ°κ° λ λκΉμ§ λ°λ³΅νλ©΄ μ€λ³΅ μλ λ²νΈλ₯Ό μ»μ μ μμ΅λλ€.
Set<Integer> lotto = new HashSet<>();
while (lotto.size() < 6) {
lotto.add((int)(Math.random() * 45) + 1);
}
- μ₯μ :
- μ€λ³΅ κ²μ¬ μμ΄ 6κ°μ μ«μλ₯Ό μ νν μ μμ
- κ°κ²°ν μ½λλ‘ μ€λ³΅μ λ°©μ§
- λ¨μ :
- Setμ μμκ° μμ΄μ μ λ ¬μ΄ νμ
- μ€λ³΅μ΄ λ°μνλ©΄ λλ€ μμ±μ΄ λ°λ³΅λμ΄ μ±λ₯ μ ν κ°λ₯
5. κΈ°μ λ©΄μ λλΉ μμ½
- λλ€νκ² μμΈ λ°°μ΄μμ μ 6κ°λ₯Ό μ ν
- μ€λ³΅ κ²μ¬ μμ΄ 6κ°μ μ«μλ₯Ό μ νν μ μμ
- λ°°μ΄ μλ κ³Όμ μμ μ€λ³΅ μμ΄ λ¬΄μμλ‘ μμ
- λ°°μ΄μ μμλ₯Ό λ°κΎΈκΈ°λ§ νλ―λ‘ μ€λ³΅λ μ μμ
- λΉκ΅ λ°©λ²:
- νμ¬ λ°©μ: λ°°μ΄ μκΈ° β μ 6κ° μ ν (μ½λκ° κ°κ²°)
- Set μ¬μ© λ°©μ: μ€λ³΅ μλ μλ£κ΅¬μ‘°(Set) νμ© (λλ€ μμ± λ°λ³΅ μ μ±λ₯ μ ν)
- κΈ°μ λ©΄μ λλΉ ν¬μΈνΈ:
- μ€λ³΅ κ²μ¬ μμ΄ λλ€νκ² μ«μ μ ννλ λ°©λ² μ€λͺ
- λ°°μ΄ μκΈ° λ°©μκ³Ό Set μ¬μ© λ°©μμ μ₯λ¨μ λΉκ΅
- μ½λμ κ°λ μ± vs μ±λ₯ μ΅μ νμ κ· νμ μ€λͺ
π νλμ 보λ μμ½
- λλ€νκ² μμ λ°°μ΄μμ μ 6κ° μ ν
- μ€λ³΅ μμ΄ λ¬΄μμ μ ν κ°λ₯
- Set μ¬μ© λ°©λ²κ³Ό λΉκ΅ (κ°κ°μ μ₯λ¨μ μ€λͺ κ°λ₯)
- μ½λκ° κ°κ²°νκ³ μ§κ΄μ μ΄λ©° μ±λ₯λ μ°μ
π’ 4λ¨κ³ λ³Έλ¬Έ: λ²νΈ μ λ ¬ (λ²λΈ μ λ ¬)
1. λ²νΈ μ λ ¬μ νμμ±
- λ‘λ λ²νΈλ μ€λ¦μ°¨μμΌλ‘ μ λ ¬ν΄μ κ²°κ³Όλ₯Ό λ°νν©λλ€.
- μ:
3, 7, 22, 33, 44, 45
- μ νλ 6κ°μ μ«μλ λλ€ μμλ‘ μμ¬ μμΌλ―λ‘
- μ«μκ° μμ κ²λΆν° μ°¨λ‘λλ‘ μ λ ¬ν΄μΌ μ μμ μΈ λ‘λ λ²νΈκ° λ©λλ€.
μ μ€λ¦μ°¨μμΌλ‘ μ λ ¬ν κΉ?
- λ‘λ κ²°κ³Ό λ°νλ νμ μ€λ¦μ°¨μμΌλ‘ ν©λλ€.
- μ:
3, 7, 22, 33, 44, 45
- μ λ ¬νμ§ μμΌλ©΄
- μ:
44, 33, 3, 22, 45, 7
- μ:
- μ«μκ° λ€μ£½λ°μ£½ μμ¬μμ΄μ νμΈνκΈ° μ΄λ ΅μ΅λλ€.
- μ€λ¦μ°¨μ μ λ ¬μ νλ©΄ 보기 μ½κ³ κ²°κ³Ό νμΈμ΄ κ°νΈν©λλ€.
πΉ λΉμ : μ«μ μμλλ‘ μ λ ¬νκΈ°
- ν¬κΈ°κ° λ€λ₯Έ 곡μ μμ 곡λΆν° ν° κ³΅κΉμ§ μμλλ‘ μ€ μΈμ°κΈ°
- μ«μκ° λ€μ£½λ°μ£½ μμ¬μμΌλ©΄ νμΈνκΈ° μ΄λ ΅μ§λ§,
- μμ κ²λΆν° μμλλ‘ λ°°μ΄νλ©΄ νλμ νμΈ κ°λ₯
2. λ²λΈ μ λ ¬ (Bubble Sort) μ¬μ©
- λ²λΈ μ λ ¬μ μλ‘ μ΄μν μ«μλΌλ¦¬ λΉκ΅νλ©΄μ
- ν° μ«μλ₯Ό μ€λ₯Έμͺ½μΌλ‘ μ΄λμν€λ μ λ ¬ μκ³ λ¦¬μ¦μ λλ€.
- μμ μ«μλ μΌμͺ½μΌλ‘ λ°λ €λλ©° μ λ ¬λ©λλ€.
- λ§μΉ κ±°ν(Bubble)μ΄ μλ‘ μ¬λΌκ°λ λͺ¨μκ³Ό λΉμ·ν΄μ
- *λ²λΈ μ λ ¬(Bubble Sort)**μ΄λΌκ³ λΆλ¦½λλ€.
λ²λΈ μ λ ¬μ νΉμ§ μμ½
- μλ‘ μ΄μν μ«μλΌλ¦¬ λΉκ΅νμ¬ ν° μ«μλ₯Ό μ€λ₯Έμͺ½μΌλ‘ μ΄λ
- ν λ²μ μνκ° λλλ©΄ κ°μ₯ ν° μ«μκ° λ§¨ μ€λ₯Έμͺ½μ μ λ ¬λ¨
- μ΄ κ³Όμ μ λ°λ³΅νλ©΄μ λͺ¨λ μ«μκ° μ€λ¦μ°¨μμΌλ‘ μ λ ¬
- μκ° λ³΅μ‘λ: O(NΒ²) (λΉν¨μ¨μ )
- μ₯μ : ꡬνμ΄ μ½κ³ μ§κ΄μ
- λ¨μ : μ λ ¬ μλκ° λλ¦Ό (ν° λ°°μ΄μμλ λΉν¨μ¨μ )
πΉ λΉμ : λ¬Όλ°©μΈμ΄ μλ‘ μ¬λΌκ°λ λͺ¨μ
- ν° μ«μκ° κ±°νμ²λΌ μ(μ€λ₯Έμͺ½)μΌλ‘ μ¬λΌκ°κ³ ,
- μμ μ«μλ λ°(μΌμͺ½)μΌλ‘ λ΄λ €κ°λ©° μ λ ¬λ¨
3. λ²λΈ μ λ ¬ μ½λ λΆμ
for (int i = 0; i < lotto.length; i++) {
boolean sortable = true;
for (int j = 0; j < lotto.length - 1 - i; j++) {
if (lotto[j] > lotto[j + 1]) {
int tmp = lotto[j];
lotto[j] = lotto[j + 1];
lotto[j + 1] = tmp;
sortable = false;
}
}
if (sortable) break;
}
μ€λͺ
- λ κ°μ© λΉκ΅νμ¬ ν° μ«μλ₯Ό μ€λ₯Έμͺ½μΌλ‘ μ΄λ
lotto[j]
μlotto[j + 1]
μ λΉκ΅νμ¬- μΌμͺ½ μ«μκ° λ ν¬λ©΄ β μλ‘ κ΅ν(Swap)
- μΌμͺ½ μ«μκ° λ μμΌλ©΄ β μ무 μΌλ μ ν¨
- ν λ²μ μνκ° λλλ©΄
- κ°μ₯ ν° μ«μκ° λ§¨ μ€λ₯Έμͺ½μ μμΉ
- κ°μ₯ μ€λ₯Έμͺ½ μ«μλ μ λ ¬μ΄ λλ μν
- λ°λ³΅νλ©° μ λ ¬
- 6κ°μ μ«μλ₯Ό 5λ² λΉκ΅νλ©΄μ μ λ ¬ μλ£
- μ΄μν μ«μλΌλ¦¬ λΉκ΅νλ©΄μ ν° μ«μλ₯Ό μ€λ₯Έμͺ½μΌλ‘ μ΄λ
- κ°μ₯ ν° μ«μκ° μ λ ¬λλ©΄ λ€μ ν° μ«μλ₯Ό μ λ ¬
sortable
νλκ·Έλ‘ μ±λ₯ μ΅μ ν- μ΄λ―Έ μ λ ¬λ μνλΌλ©΄ λ μ΄μ λ°λ³΅νμ§ μμ
- λΉκ΅μ Swapμ΄ λ°μνμ§ μμΌλ©΄ β
sortable = true
sortable
μ΄true
λΌλ©΄ βbreak
λ‘ λ°λ³΅λ¬Έ μ’ λ£- λΆνμν λ°λ³΅μ μλ΅ν΄μ μ±λ₯ ν₯μ
μμ: λ²λΈ μ λ ¬ κ³Όμ
// μ΄κΈ° μν
lotto = [33, 7, 22, 1, 19, 44]
// 1νμ ν (κ°μ₯ ν° μ«μ 44κ° λ§¨ μ€λ₯Έμͺ½μΌλ‘ μ΄λ)
lotto = [7, 22, 1, 19, 33, 44]
// 2νμ ν (33μ΄ μ€λ₯Έμͺ½μΌλ‘ μ΄λ)
lotto = [7, 1, 19, 22, 33, 44]
// 3νμ ν (22κ° μ€λ₯Έμͺ½μΌλ‘ μ΄λ)
lotto = [1, 7, 19, 22, 33, 44]
- 1νμ λ§λ€ κ°μ₯ ν° μ«μκ° μ€λ₯Έμͺ½μΌλ‘ μ΄λ
- μ΅μ’
μν:
[1, 7, 19, 22, 33, 44]
(μ€λ¦μ°¨μ μ λ ¬)
πΉ λΉμ : λ¬Όλ°©μΈμ΄ μλ‘ μ¬λΌκ°λ λͺ¨μ
- κ°μ₯ ν° μ«μκ° κ±°νμ²λΌ μ€λ₯Έμͺ½μΌλ‘ μ΄λνλ©°
- μμ μ«μλ μΌμͺ½μ λ¨μ
- μ΄λμ λ°λ³΅νλ©° λͺ¨λ μ«μκ° μ λ ¬λ¨
4. λΉν¨μ¨μ± λ° κ°μ μ
λ²λΈ μ λ ¬μ λΉν¨μ¨μ±
- μκ° λ³΅μ‘λ: O(NΒ²)
- λΉκ΅ νμμ κ΅ν νμκ° λ§μ
- μ λ ¬ μλκ° λ§€μ° λλ¦Ό
- ν° λ°°μ΄μμλ λΉν¨μ¨μ
κ°μ μ : Arrays.sort() μ¬μ©νκΈ°
- μλ°μμ μ 곡νλ
Arrays.sort()
λ©μλλ Dual-Pivot Quick Sort
μκ³ λ¦¬μ¦μ μ¬μ©ν©λλ€.- μκ° λ³΅μ‘λ: O(N log N) β λ²λΈ μ λ ¬λ³΄λ€ ν¨μ¬ λΉ λ¦
lotto[]
λ°°μ΄μ μ€λ¦μ°¨μμΌλ‘ μ λ ¬νλ €λ©΄ λ€μκ³Ό κ°μ΄ μ¬μ©ν©λλ€:
Arrays.sort(lotto);
- κ°λ¨ν μ½λλ‘ λΉ λ₯΄κ³ ν¨μ¨μ μΈ μ λ ¬μ΄ κ°λ₯ν©λλ€.
- λ²λΈ μ λ ¬ λμ
Arrays.sort()
λ₯Ό μ¬μ©νλ κ²μ΄ μ±λ₯μ μ 리ν©λλ€.
5. κΈ°μ λ©΄μ λλΉ μμ½
- λ²λΈ μ λ ¬(Bubble Sort): μ΄μν μ«μλΌλ¦¬ λΉκ΅νλ©° μ λ ¬
- ν° μ«μλ₯Ό μ€λ₯Έμͺ½μΌλ‘ μ΄λνλ©° μμ μ«μλ μΌμͺ½μΌλ‘ λ°λ¦Ό
- μκ° λ³΅μ‘λ: O(NΒ²) (λΉν¨μ¨μ )
sortable
νλκ·Έλ‘ μ±λ₯ μ΅μ ν (μ΄λ―Έ μ λ ¬λ κ²½μ° λ°λ³΅λ¬Έ μ’ λ£)- κ°μ μ :
Arrays.sort()
μ¬μ© (O(N log N))Dual-Pivot Quick Sort
μκ³ λ¦¬μ¦μΌλ‘ ν¨μ¬ λΉ λ¦
- κΈ°μ λ©΄μ λλΉ ν¬μΈνΈ:
- λ²λΈ μ λ ¬μ μ리μ λ¨μ μ€λͺ
- μκ° λ³΅μ‘λ λΉκ΅: O(NΒ²) vs O(N log N)
Arrays.sort()
μ¬μ©λ²κ³Ό μ₯μ !
π 5λ¨κ³ λ³Έλ¬Έ: λ²νΈ μΆλ ₯νκΈ°
1. λ²νΈ μΆλ ₯μ νλ μ΄μ
- μ λ ¬λ λ‘λ λ²νΈ 6κ°λ₯Ό μ¬μ©μκ° νμΈν μ μλλ‘ μΆλ ₯ν©λλ€.
- μ:
1, 7, 19, 22, 33, 44
- κ²°κ³Όλ₯Ό νλ©΄μ 보μ¬μ£ΌκΈ° μν΄ *
System.out.println()
μ μ¬μ©ν©λλ€. - λ²νΈ μ¬μ΄μ
,
λ₯Ό λΆμ¬μ μ°μμ μΌλ‘ μΆλ ₯ν©λλ€.
μ ,
λ‘ κ΅¬λΆν΄μ μΆλ ₯ν κΉ?
- 6κ°μ μ«μλ₯Ό μ°μμ μΌλ‘ μΆλ ₯νλ©΄ 보기 λΆνΈν©λλ€.
- μ:
1719223344
- μ:
μ«μ, μ«μ, μ«μ, ...
νμμΌλ‘ μΆλ ₯νλ©΄- νλμ λ²νΈλ₯Ό νμΈν μ μμ΅λλ€.
- μ:
1, 7, 19, 22, 33, 44
- μ:
πΉ λΉμ : μ νλ²νΈ μΆλ ₯νκΈ°
- μ νλ²νΈλ₯Ό μ«μλ§ μ°μμ μΌλ‘ μ°λ©΄ μμ보기 νλ¦
- μ:
01012345678
- μ:
- μ€κ°μ λ₯Ό λ£μ΄μ μ«μλ₯Ό ꡬλΆνλ©΄ 보기 μ¬μ
- μ:
010-1234-5678
- μ:
2. λ²νΈ μΆλ ₯ μ½λ λΆμ
System.out.printf("μ΅μ’
μ λ ¬ : ");
for (int a : lotto)
System.out.printf(a + ",");
μ€λͺ
System.out.printf()
λ‘ κ²°κ³Ό λ¬Έμμ΄ μΆλ ₯printf()
λ νμνλ λ¬Έμμ΄μ μΆλ ₯ν©λλ€."μ΅μ’ μ λ ¬ : "
λΆλΆμ λ¬Έμμ΄ κ·Έλλ‘ μΆλ ₯λ©λλ€.- μ:
μ΅μ’ μ λ ¬ :
-
ν₯μλ forλ¬Έ μ¬μ©νκΈ°
for (int a : lotto)
- ν₯μλ forλ¬Έμ λ°°μ΄μ λͺ¨λ μμλ₯Ό νλμ© κΊΌλ΄μ λ°λ³΅ν©λλ€.
lotto[]
λ°°μ΄μ μλ 6κ°μ μ«μλ₯Ό μΌμͺ½λΆν° μμλλ‘ κΊΌλ λλ€.a
μλ νμ¬ κΊΌλΈ μ«μκ° μ μ₯λ©λλ€.- 첫 λ²μ§Έ λ°λ³΅:
a = lotto[0]
- λ λ²μ§Έ λ°λ³΅:
a = lotto[1]
- β¦
- μ¬μ― λ²μ§Έ λ°λ³΅:
a = lotto[5]
- 첫 λ²μ§Έ λ°λ³΅:
-
μ«μμ
,
λ₯Ό ν¨κ» μΆλ ₯νκΈ°System.out.printf(a + ",");
- μ«μ(
a
)μ,
λ₯Ό λ¬Έμμ΄λ‘ μ΄μ΄λΆμ¬μ μΆλ ₯ν©λλ€. - μ:
1, 7, 19, 22, 33, 44,
- λͺ¨λ μ«μ λ€μ
,
κ° λΆμ- μ:
1, 7, 19, 22, 33, 44,
(λ§μ§λ§μλ,
κ° μμ)
- μ:
- λ§μ§λ§
,
λ μ κ±°νμ§ μμ
- μ«μ(
μμ: μΆλ ₯ κ²°κ³Ό
μ΅μ’
μ λ ¬ : 1, 7, 19, 22, 33, 44,
- μ€λ¦μ°¨μμΌλ‘ μ λ ¬λ 6κ°μ μ«μκ° μ°μμ μΌλ‘ μΆλ ₯λ©λλ€.
- λͺ¨λ μ«μ λ€μ
,
κ° λΆμ΄μ μΆλ ₯λ©λλ€. - λ§μ§λ§μλ
,
κ° λΆμ (λ¬Έλ² μ€λ₯λ μλμ§λ§, κ°λ μ±μ΄ λ¨μ΄μ§)
3. κ°μ μ : λ§μ§λ§ ,
μ κ±°νκΈ°
λ¬Έμ μ
- νμ¬ λ°©μμ λͺ¨λ μ«μ λ€μ
,
κ° λΆμ- μ:
1, 7, 19, 22, 33, 44,
- μ:
- λ§μ§λ§
,
λ λΆνμνλ©° 보기 λΆνΈν¨
κ°μ λ°©λ² 1: if
λ¬ΈμΌλ‘ λ§μ§λ§ ,
μ κ±°
System.out.printf("μ΅μ’
μ λ ¬ : ");
for (int i = 0; i < lotto.length; i++) {
System.out.printf(lotto[i] + (i < lotto.length - 1 ? "," : ""));
}
i < lotto.length - 1
μΌ λλ§,
λ₯Ό λΆμ- λ§μ§λ§ μ«μλ
i
κ°lotto.length - 1
*μ΄λ―λ‘ **false
κ° λμ΄,
κ° λΆμ§ μμ - μΆλ ₯ μ:
μ΅μ’ μ λ ¬ : 1, 7, 19, 22, 33, 44
κ°μ λ°©λ² 2: String.join()
μ¬μ©νκΈ° (Java 8 μ΄μ)
String result = String.join(",", Arrays.stream(lotto)
.mapToObj(String::valueOf)
.toArray(String[]::new));
System.out.printf("μ΅μ’
μ λ ¬ : " + result);
Arrays.stream(lotto)
λ‘ λ°°μ΄μ μ€νΈλ¦Ό(Stream)μΌλ‘ λ³ν.mapToObj(String::valueOf)
λ‘ μ μλ₯Ό λ¬Έμμ΄λ‘ λ³ν.toArray(String[]::new)
λ‘ λ¬Έμμ΄ λ°°μ΄λ‘ λ³νString.join()
μΌλ‘ κ° μ«μ μ¬μ΄μ,
λ₯Ό λ£μ΄μ νλμ λ¬Έμμ΄λ‘ μ°κ²°- μΆλ ₯ μ:
μ΅μ’ μ λ ¬ : 1, 7, 19, 22, 33, 44
- κ°λ μ±μ΄ λκ³ μ½λκ° κ°κ²°ν¨
4. κΈ°μ λ©΄μ λλΉ μμ½
- μ λ ¬λ λ‘λ λ²νΈλ₯Ό μ€λ¦μ°¨μμΌλ‘ μΆλ ₯
- λ²νΈ μ¬μ΄μ
,
λ₯Ό λ£μ΄μ μ°μμ μΌλ‘ μΆλ ₯ - ν₯μλ forλ¬ΈμΌλ‘ λ°°μ΄μ λͺ¨λ μμλ₯Ό μΌμͺ½λΆν° μμλλ‘ κΊΌλ
- λ¬Έμ μ :
- λ§μ§λ§
,
κ° λΆνμνκ² μΆλ ₯
- λ§μ§λ§
- κ°μ μ :
if
λ¬ΈμΌλ‘ λ§μ§λ§,
μ κ±°String.join()
μ¬μ© (Java 8 μ΄μ)- κ°λ μ±μ΄ λκ³ μ½λκ° κ°κ²°ν¨
- κΈ°μ λ©΄μ λλΉ ν¬μΈνΈ:
- ν₯μλ forλ¬Έκ³Ό
printf()
μ¬μ©λ² μ€λͺ - λ§μ§λ§
,
λ¬Έμ ν΄κ²° λ°©λ² μ€λͺ - Java 8μ
String.join()
μ¬μ©λ² λ° Stream API μ€λͺ
- ν₯μλ forλ¬Έκ³Ό
π νλμ 보λ μμ½
- μ€λ¦μ°¨μμΌλ‘ μ λ ¬λ λ²νΈ 6κ° μΆλ ₯
- λ²νΈ μ¬μ΄μ
,
λ₯Ό λ£μ΄μ μ°μ μΆλ ₯ - ν₯μλ forλ¬ΈμΌλ‘ λ°°μ΄μ λͺ¨λ μμλ₯Ό μμλλ‘ μΆλ ₯
- λ§μ§λ§
,
λ¬Έμ ν΄κ²°:if
λ¬Έ μ¬μ© λλString.join()
μ¬μ© (Java 8 μ΄μ)
- κ°λ μ±κ³Ό μ½λ κ°κ²°μ± ν₯μ
βοΈ 6λ¨κ³ λ³Έλ¬Έ: μ±λ₯ μ΅μ ν λ° κ°μ μ
1. μ±λ₯ μ΅μ νκ° νμν μ΄μ
- λ‘λ λ²νΈ μμ± μ½λλ λλ€ μ ν, λ²νΈ μ ν, μ λ ¬, μΆλ ₯μ κ³Όμ μ κ±°μΉ©λλ€.
- μ±λ₯ μ΅μ νλ₯Ό νλ©΄ μ½λ μ€ν μλκ° λΉ¨λΌμ§κ³ μμ μ¬μ©μ΄ ν¨μ¨μ μ΄ λ©λλ€.
- νΉν, λλ€ μ νκ³Ό μ λ ¬ κ³Όμ μ΄ λΉν¨μ¨μ μ΄μ΄μ μ΅μ νκ° νμν©λλ€.
μ μ±λ₯ μ΅μ νκ° νμν κΉ?
- λ‘λ λ²νΈλ μ€λ³΅ μμ΄ λλ€νκ² μμ±λμ΄μΌ νλ―λ‘
- λλ€ μ νκ³Ό μ λ ¬ κ³Όμ μ΄ ν¬ν¨λ©λλ€.
- νμ§λ§, νμ¬ λ°©μμ λΆνμν μ°μ°μ΄ λ§μμ λλ¦¬κ³ λΉν¨μ¨μ μ λλ€.
- ν¨μ¨μ μΈ μκ³ λ¦¬μ¦μ μ¬μ©νλ©΄ μλκ° λΉ¨λΌμ§κ³ μμμ μ μ½ν μ μμ΅λλ€.
πΉ λΉμ : 곡 λ½κΈ° ν΅μ λ ν¨μ¨μ μΌλ‘ μκΈ°
- νμ¬ λ°©μμ 곡 45κ°λ₯Ό 1000λ² νλλ κ²κ³Ό κ°μ
- λ ν¨μ¨μ μΈ λ°©λ²μΌλ‘ μ΅μνμ μμ§μμΌλ‘ 곡μ μκ³ μ λ ¬νλ©΄
- μλμ§λ μ μ½λκ³ μκ°λ μ μ½λ¨
2. λλ€ μ νμ λ¬Έμ μ λ° κ°μ μ
νμ¬ λ°©μμ λ¬Έμ μ : Swap λ°©μ
for (int i = 0; i < 1000; i++) {
int f = (int)(Math.random() * 45);
int t = (int)(Math.random() * 45);
int tmp = balls[f];
balls[f] = balls[t];
balls[t] = tmp;
}
- λλ€νκ² λ½μ λ μμΉμ κ°μ κ΅ν(Swap) νμ¬ λ°°μ΄μ μμ΅λλ€.
- 1000λ² λ°λ³΅νμ¬ λ°°μ΄μ΄ μΆ©λΆν μμ΄λλ‘ ν©λλ€.
λΉν¨μ¨μ μΈ μ
- μ€λ³΅λ μμΉκ° μ¬λ¬ λ² μ νλ μ μμ
- μ:
balls[3]
κ³Όballs[3]
μ Swapνλ©΄ λ³νκ° μμ - κ°μ μμΉλ₯Ό μ¬λ¬ λ² μ ννλ©΄ λΆνμν μ°μ° λ°μ
- μ:
- 45κ°μ μ«μλ₯Ό 1000λ² Swap β λΆνμν μ°μ°μ΄ λ무 λ§μ
- μκ° λ³΅μ‘λ: O(N * 1000) (λΉν¨μ¨μ )
- λ°°μ΄ ν¬κΈ°μ λΉν΄ Swap νμκ° λ무 λ§μ
κ°μ μ : Fisher-Yates μκ³ λ¦¬μ¦
- Fisher-Yates μκ³ λ¦¬μ¦μ κ°μ₯ ν¨μ¨μ μΈ λλ€ μ ν μκ³ λ¦¬μ¦μ λλ€.
- λ€μμλΆν° μμΌλ‘ μ΄λνλ©΄μ
- μ΄μ μμΉ μ€ νλλ₯Ό 무μμλ‘ μ ννμ¬ κ΅νν©λλ€.
- ν λ² μ νλ μμΉλ λ€μ μ νλμ§ μμ β μ€λ³΅ λ°©μ§
- O(N) μκ° λ³΅μ‘λλ‘ νμ¬ λ°©μ(O(N * 1000))λ³΄λ€ ν¨μ¬ λΉ λ¦
Fisher-Yates μκ³ λ¦¬μ¦ μ½λ
for (int i = balls.length - 1; i > 0; i--) {
int j = (int)(Math.random() * (i + 1));
int tmp = balls[i];
balls[i] = balls[j];
balls[j] = tmp;
}
μ€λͺ
- λ€μμλΆν° μμΌλ‘ μ΄λνλ©΄μ
i
λ λ°°μ΄μ λ§μ§λ§ μΈλ±μ€λΆν° μμͺ½μΌλ‘ μ΄λν©λλ€.- *νμ¬ μμΉ(
i
)μμ **μ΄μ μμΉ μ€ νλ(j
)λ₯Ό λλ€νκ² μ νν©λλ€.
- λλ€νκ² μ νλ μμΉμ κ΅ν
j
λ 0λΆν°i
κΉμ§μ λλ€ν μΈλ±μ€μ λλ€.balls[i]
μballs[j]
μ κ°μ κ΅ν(Swap) ν©λλ€.
- ν λ² μ νλ μμΉλ λ€μ μ νλμ§ μμ
- *νμ¬ μμΉ(
i
)λ **μ΄μ μμΉ μ€ νλμ κ΅ννκ³ , - λ€μ λ°λ³΅μμλ νμ¬ μμΉ(
i
)κ° μ μΈλ©λλ€. - μ€λ³΅ μμ΄ λλ€νκ² μμ
- *νμ¬ μμΉ(
πΉ λΉμ : μΉ΄λ μκΈ°
- 맨 λ€ μΉ΄λλΆν° μμΌλ‘ μ΄λνλ©° μμͺ½ μΉ΄λ μ€ νλμ κ΅ν
- μμͺ½μ μλ μΉ΄λλ λ€μ μ νλμ§ μμ
- μ€λ³΅ μμ΄ λλ€νκ² μμ
Fisher-Yates μκ³ λ¦¬μ¦μ μ₯μ
- μ€λ³΅ μμ΄ λλ€νκ² μμ
- 45κ°μ μ«μλ₯Ό 45λ²λ§ Swap β λΆνμν μ°μ° μμ
- μκ° λ³΅μ‘λ: O(N) (νμ¬ λ°©μλ³΄λ€ ν¨μ¬ λΉ λ¦)
- λλ€ μ ν λ¬Έμ ν΄κ²°μ μ΅μ νλ μκ³ λ¦¬μ¦
3. μ λ ¬μ λ¬Έμ μ λ° κ°μ μ
νμ¬ λ°©μμ λ¬Έμ μ : λ²λΈ μ λ ¬
for (int i = 0; i < lotto.length; i++) {
boolean sortable = true;
for (int j = 0; j < lotto.length - 1 - i; j++) {
if (lotto[j] > lotto[j + 1]) {
int tmp = lotto[j];
lotto[j] = lotto[j + 1];
lotto[j + 1] = tmp;
sortable = false;
}
}
if (sortable) break;
}
- λ²λΈ μ λ ¬μ μ΄μν μ«μλΌλ¦¬ λΉκ΅νλ©΄μ ν° μ«μλ₯Ό μ€λ₯Έμͺ½μΌλ‘ μ΄λ
- μκ° λ³΅μ‘λ: O(NΒ²) (λΉν¨μ¨μ )
- λ°°μ΄μ ν¬κΈ°κ° 컀μ§μλ‘ λΉκ΅ νμμ Swap νμκ° κΈκ²©ν μ¦κ°
κ°μ μ : Arrays.sort() μ¬μ©νκΈ°
- μλ°μμ μ 곡νλ
Arrays.sort()
λ©μλλ Dual-Pivot Quick Sort
μκ³ λ¦¬μ¦μ μ¬μ©ν©λλ€.- μκ° λ³΅μ‘λ: O(N log N) β λ²λΈ μ λ ¬λ³΄λ€ ν¨μ¬ λΉ λ¦
Arrays.sort(lotto);
- κ°λ¨ν μ½λλ‘ λΉ λ₯΄κ³ ν¨μ¨μ μΈ μ λ ¬μ΄ κ°λ₯ν©λλ€.
- λ²λΈ μ λ ¬ λμ
Arrays.sort()
λ₯Ό μ¬μ©νλ κ²μ΄ μ±λ₯μ μ 리ν©λλ€.
4. κΈ°μ λ©΄μ λλΉ μμ½
- λλ€ μ
ν μ΅μ ν:
- νμ¬ λ°©μ: Swap λ°©μ (O(N * 1000), λΉν¨μ¨μ )
- κ°μ μ : Fisher-Yates μκ³ λ¦¬μ¦ (O(N), μ€λ³΅ μμ΄ λλ€νκ² μμ)
- μ λ ¬ μ΅μ ν:
- νμ¬ λ°©μ: λ²λΈ μ λ ¬ (O(NΒ²), λΉν¨μ¨μ )
- κ°μ μ :
Arrays.sort()
μ¬μ© (O(N log N), λΉ λ₯΄κ³ ν¨μ¨μ )
- κΈ°μ λ©΄μ λλΉ ν¬μΈνΈ:
- λλ€ μ νκ³Ό μ λ ¬ μκ³ λ¦¬μ¦μ μ±λ₯ λΉκ΅
- μκ° λ³΅μ‘λ λΆμ: O(NΒ²), O(N log N), O(N)
- Fisher-Yates μκ³ λ¦¬μ¦κ³Ό
Arrays.sort()
μ μ리 μ€λͺ
π 7λ¨κ³ λ³Έλ¬Έ: κΈ°μ λ©΄μ λλΉ ν¬μΈνΈ λ° μ΄μ 리
1. κΈ°μ λ©΄μ λλΉμ μ€μμ±
- λ‘λ λ²νΈ μμ± μ½λλ₯Ό ν΅ν΄
- μλ£κ΅¬μ‘°(Array)
- λλ€ μκ³ λ¦¬μ¦(Random Shuffle)
- μ λ ¬ μκ³ λ¦¬μ¦(Sorting)
- μ±λ₯ μ΅μ ν(Optimization)
- μ΄ λ€ κ°μ§ κ°λ μ μ’ ν©μ μΌλ‘ μ€λͺ ν μ μμ΅λλ€.
μ κΈ°μ λ©΄μ λλΉκ° νμν κΉ?
- κΈ°μ λ©΄μ μμλ λ¬Έμ ν΄κ²° λ₯λ ₯κ³Ό μ½λ μ΅μ ν λ₯λ ₯μ νκ°ν©λλ€.
- λ‘λ λ²νΈ μμ± μ½λλ₯Ό μ€λͺ
νλ©΄μ
- μλ£κ΅¬μ‘°μ μκ³ λ¦¬μ¦μ μ΄ν΄νκ³ μλμ§
- μ±λ₯ μ΅μ νλ₯Ό μ΄λ»κ² νλμ§
- μκ° λ³΅μ‘λμ κ³΅κ° λ³΅μ‘λλ₯Ό λΆμν μ μλμ§
- μ΄ μΈ κ°μ§λ₯Ό λͺ¨λ μ€λͺ ν μ μμ΅λλ€.
πΉ λΉμ : μ리 λν μ°Έκ° μ€λΉ
- μ리 λνμμλ μ리 μ€λ ₯λΏλ§ μλλΌ
- μ¬λ£μ λ°°ν©(μλ£κ΅¬μ‘°)
- 쑰리 μμ(μκ³ λ¦¬μ¦)
- 쑰리 μκ° λ¨μΆ(μ±λ₯ μ΅μ ν)
- μ΄ λͺ¨λ κ²μ μ’ ν©μ μΌλ‘ νκ°ν©λλ€.
- λ‘λ λ²νΈ μμ± μ½λλ κ°λ° μλμ μ’ ν©μ μΌλ‘ 보μ¬μ€ μ μλ μμ μ λλ€.
2. μ£Όμ κ°λ λ° μ§λ¬Έ ν¬μΈνΈ
1) λ°°μ΄(Array)μ μλ£κ΅¬μ‘°
- *λ°°μ΄(Array)μ **κ°μ νμ μ μ¬λ¬ κ°μ νλλ‘ λ¬Άμ΄μ μ μ₯ν©λλ€.
- λ‘λ λ²νΈ μμ± μ½λμμλ
balls[]
λ°°μ΄μ 1λΆν° 45κΉμ§μ μ«μλ₯Ό μ μ₯ν©λλ€.lotto[]
λ°°μ΄μ μ νλ 6κ°μ λ²νΈλ₯Ό μ μ₯ν©λλ€.
λ©΄μ μ§λ¬Έ ν¬μΈνΈ
- λ°°μ΄(Array)μ νΉμ§μ 무μμΈκ°μ?
- κ°μ νμ μ λ°μ΄ν°λ§ μ μ₯ν μ μμ
- μΈλ±μ€λ 0λΆν° μμ
- ν¬κΈ°κ° κ³ μ λμ΄ μμΌλ©° ν λ² μμ±νλ©΄ ν¬κΈ°λ₯Ό λ³κ²½ν μ μμ
- λ°°μ΄(Array)μ ArrayListμ μ°¨μ΄μ μ 무μμΈκ°μ?
- Arrayλ ν¬κΈ°κ° κ³ μ λκ³ μ΄κΈ°ν μ ν¬κΈ°λ₯Ό μ§μ ν΄μΌ ν¨
- ArrayListλ ν¬κΈ°κ° κ°λ³μ μΌλ‘ λμ μΌλ‘ ν¬κΈ° λ³κ²½ κ°λ₯
- ArrayListλ λ΄λΆμ μΌλ‘ λ°°μ΄μ μ¬μ©νμ§λ§,
- μλμΌλ‘ ν¬κΈ°κ° μ‘°μ λκ³ λ€μν λ©μλλ₯Ό μ 곡
2) λλ€ μ ν(Random Shuffle)κ³Ό λλ€ μκ³ λ¦¬μ¦
- λλ€ μ νμ λ°°μ΄μ μμλ₯Ό 무μμλ‘ λ³κ²½ν©λλ€.
- νμ¬ λ°©μμ Swap λ°©μμ μ¬μ©νμ§λ§,
- Fisher-Yates μκ³ λ¦¬μ¦μ΄ λ ν¨μ¨μ μ λλ€.
λ©΄μ μ§λ¬Έ ν¬μΈνΈ
- νμ¬ λ°©μμ λ¬Έμ μ κ³Ό κ°μ μ μ 무μμΈκ°μ?
- λ¬Έμ μ :
- λλ€ν μμΉλ₯Ό 1000λ² Swap β λΆνμν μ°μ°μ΄ λ§μ
- μ€λ³΅λ μμΉκ° μ¬λ¬ λ² μ νλ μ μμ
- μκ° λ³΅μ‘λ: O(N * 1000) (λΉν¨μ¨μ )
- κ°μ μ :
- Fisher-Yates μκ³ λ¦¬μ¦ μ¬μ©
- μ€λ³΅ μμ΄ λλ€νκ² μμ
- O(N) μκ° λ³΅μ‘λλ‘ νμ¬ λ°©μλ³΄λ€ ν¨μ¬ λΉ λ¦
- λ¬Έμ μ :
- Fisher-Yates μκ³ λ¦¬μ¦μ μ리λ 무μμΈκ°μ?
- λ€μμλΆν° μμΌλ‘ μ΄λνλ©΄μ
- μ΄μ μμΉ μ€ νλλ₯Ό 무μμλ‘ μ ννμ¬ κ΅ν
- ν λ² μ νλ μμΉλ λ€μ μ νλμ§ μμ
- μ€λ³΅ μμ΄ λλ€νκ² μμ
3) μ λ ¬(Sorting) μκ³ λ¦¬μ¦
- *λ²λΈ μ λ ¬(Bubble Sort)μ **μ΄μν μ«μλΌλ¦¬ λΉκ΅νλ©΄μ
- ν° μ«μλ₯Ό μ€λ₯Έμͺ½μΌλ‘ μ΄λνλ©° μ€λ¦μ°¨μμΌλ‘ μ λ ¬ν©λλ€.
- νμ§λ§, μκ° λ³΅μ‘λ O(NΒ²)λ‘ λΉν¨μ¨μ μ λλ€.
Arrays.sort()
λ©μλλ₯Ό μ¬μ©νλ©΄ O(N log N)μΌλ‘ λ λΉ λ₯΄κ² μ λ ¬ν μ μμ΅λλ€.
λ©΄μ μ§λ¬Έ ν¬μΈνΈ
- λ²λΈ μ λ ¬μ λ¬Έμ μ κ³Ό κ°μ μ μ 무μμΈκ°μ?
- λ¬Έμ μ :
- O(NΒ²) μκ° λ³΅μ‘λ
- λΉκ΅ νμμ κ΅ν νμκ° λ§μ
- λ°°μ΄μ ν¬κΈ°κ° 컀μ§μλ‘ μ±λ₯ μ ν
- κ°μ μ :
Arrays.sort()
λ©μλ μ¬μ©- Dual-Pivot Quick Sort μκ³ λ¦¬μ¦μΌλ‘ O(N log N)
- λΉ λ₯΄κ³ ν¨μ¨μ μΈ μ λ ¬
- λ¬Έμ μ :
- λ²λΈ μ λ ¬κ³Ό Quick Sortμ μ°¨μ΄μ μ 무μμΈκ°μ?
- λ²λΈ μ λ ¬(Bubble Sort)
- μ΄μν μ«μλΌλ¦¬ λΉκ΅
- ν° μ«μλ₯Ό μ€λ₯Έμͺ½μΌλ‘ μ΄λ
- μκ° λ³΅μ‘λ: O(NΒ²)
- ꡬνμ΄ μ½μ§λ§ λΉν¨μ¨μ
- Quick Sort (Dual-Pivot Quick Sort)
- κΈ°μ€(Pivot)μ μ νκ³ μ’μ°λ‘ λΆν
- λΆν ν λΆλΆ λ°°μ΄μ μ¬κ·μ μΌλ‘ μ λ ¬
- μκ° λ³΅μ‘λ: O(N log N)
- λΉ λ₯΄κ³ ν¨μ¨μ μΈ μ λ ¬
- λ²λΈ μ λ ¬(Bubble Sort)
4) μ±λ₯ μ΅μ ν λ° μκ° λ³΅μ‘λ λΆμ
- μ±λ₯ μ΅μ νλ μ½λ μ€ν μλλ₯Ό λμ΄κ³ μμ μ¬μ©μ μ μ½ν©λλ€.
- λλ€ μ νκ³Ό μ λ ¬ μκ³ λ¦¬μ¦μμ μ±λ₯ μ΅μ νλ₯Ό νμ΅λλ€.
λ©΄μ μ§λ¬Έ ν¬μΈνΈ
- μκ° λ³΅μ‘λλ 무μμΈκ°μ?
- *μ λ ₯ ν¬κΈ°(N)κ° μ»€μ§μλ‘ **μ°μ° νμκ° μ¦κ°νλ μ λλ₯Ό λνλ λλ€.
- Big-O νκΈ°λ²μΌλ‘ ννν©λλ€.
- μ: O(N), O(N log N), O(NΒ²), O(NΒ³)
- λ‘λ λ²νΈ μμ± μ½λμ μκ° λ³΅μ‘λλ₯Ό μ€λͺ
ν΄λ³΄μΈμ.
- λλ€ μ ν (Fisher-Yates μκ³ λ¦¬μ¦): O(N)
- μ λ ¬ (
Arrays.sort()
): O(N log N) - μ 체 μκ° λ³΅μ‘λ: O(N log N)
5. κΈ°μ λ©΄μ λλΉ μ΄μ 리
- λ°°μ΄κ³Ό μλ£κ΅¬μ‘°:
Array
μArrayList
μ μ°¨μ΄μ μ€λͺ - λλ€ μ ν μκ³ λ¦¬μ¦: νμ¬ λ°©μ vs Fisher-Yates μκ³ λ¦¬μ¦
- μ λ ¬ μκ³ λ¦¬μ¦: λ²λΈ μ λ ¬ vs Quick Sort (
Arrays.sort()
) - μκ° λ³΅μ‘λ λΆμ: O(N), O(N log N), O(NΒ²) μ€λͺ
- μ±λ₯ μ΅μ ν λ°©λ²: λΆνμν μ°μ° μ κ±° λ° ν¨μ¨μ μΈ μκ³ λ¦¬μ¦ μ¬μ©