β λ¬Έμ μ€λͺ
KOI ν΅μ μ°κ΅¬μλ λ μ΄μ λ₯Ό μ΄μ©ν λΉλ° ν΅μ μμ€ν
μ κ°λ° μ€μ
λλ€.
μ΄λ₯Ό μν΄ μΌμ§μ μμ Nκ°μ λμ΄κ° μλ‘ λ€λ₯Έ νμ μΈμ°κ³ , νμ κΌλκΈ°μ λ μ΄μ μ‘μ κΈ°λ₯Ό μ€μΉνμ΅λλ€.
• λͺ¨λ νμ **μμ μ μΌμͺ½ λ°©ν₯(μ¦, μμͺ½ νλ€)**μΌλ‘ λ μ΄μ λ₯Ό λ°μ¬ν©λλ€.
• λ μ΄μ λ κ°μ₯ λ¨Όμ λ§λλ νλμ νμμλ§ μμ λ©λλ€.
• μμ μ₯μΉλ λͺ¨λ νμ λͺΈμ²΄μ λΆμ°©λμ΄ μμΌλ©°, λ°μ¬λ λ μ΄μ λ λ³ΈμΈμ μμͺ½μ μλ ν μ€ λ³ΈμΈλ³΄λ€ λμ νμμλ§ μμ λ μ μμ΅λλ€.
μμ μ€λͺ
νμ λμ΄ λ°°μ΄μ΄ [6, 9, 5, 7, 4]μΈ κ²½μ° :
ν λ²νΈ: 1 2 3 4 5
λμ΄: 6 9 5 7 4
λ μ΄μ : ← ← ← ← ←
- 5λ² ν(4)μ λ μ΄μ → 4λ² ν(7)μ΄ μμ
- 4λ² ν(7)μ λ μ΄μ → 2λ² ν(9)μ΄ μμ
- 3λ² ν(5)μ λ μ΄μ → 2λ² ν(9)μ΄ μμ
- 2λ² ν(9), 1λ² ν(6)μ μμ νλ νμ΄ μμ
μΆλ ₯: 0 0 2 2 4
π μ ν 쑰건
• 1 ≤ N ≤ 500,000
• κ° νμ λμ΄ : 1 μ΄μ 100,000,000 μ΄ν
• μκ° λ³΅μ‘λ O(N²) νμ΄λ‘λ μ ν μκ° μ΄κ³Ό κ°λ₯ (μΆν μ€ν κΈ°λ° κ°μ κ°λ₯)
π λ¬Έμ μμ½
• κ° νμ μΌμͺ½ λ°©ν₯μΌλ‘ λ μ΄μ λ₯Ό μλ€.
• μκΈ°λ³΄λ€ λμ νμ΄ μ²μ λ±μ₯νλ κ³³κΉμ§ μμ κ°λ₯
• μμ ν νμ μΈλ±μ€(1-based)λ₯Ό μΆλ ₯, μμ νμ΄ μμΌλ©΄ 0
β μ½λ©
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int totalTower = sc.nextInt();
int[] tower = new int[totalTower];
int[] receive = new int[totalTower]; // μμ ν μΈλ±μ€ μ μ₯
for (int i = 0; i < totalTower; i++) {
tower[i] = sc.nextInt();
}
// μ€λ₯Έμͺ½ νλΆν° μΌμͺ½ νλ€μ κ²μ¬
for (int i = totalTower - 1; i > 0; i--) {
for (int j = i - 1; j >= 0; j--) {
if (tower[j] > tower[i]) {
receive[i] = j + 1; // μΈλ±μ€λ 1λΆν° μΆλ ₯
break;
}
}
}
for (int i = 0; i < totalTower; i++) {
System.out.print(receive[i] + " ");
}
}
}
π‘ ν΄μ€
• λΈλ£¨νΈν¬μ€ λ°©μμΌλ‘ κ° νλ§λ€ μΌμͺ½μ μλ νμ μννλ©° νμΈ
• iλ²μ§Έ νμ μΌμͺ½ νλ€μ jλ‘ μννλ©΄μ, μ²μ μκΈ°λ³΄λ€ ν° νμ μ°ΎμΌλ©΄ κ·Έ μΈλ±μ€λ₯Ό μ μ₯νκ³ break
• μκ°λ³΅μ‘λλ O(N²)λ‘, μ΅μ μ κ²½μ° 500,000 * 500,000μ μκ° μ΄κ³Ό λ°μν μ μμ
• β μ€μ λν λ°μ΄ν°μμλ μ€νμ μ΄μ©ν O(N) νμ΄κ° νμ