-
[Algo RhythmπΊπ] νλ‘κ·Έλλ¨Έμ€ κ³ λμ kit λλμ§Algo RhythmπΊπ/Programmers 2020. 8. 8. 22:49
π λ¬Έμ μ€λͺ
λλμ΄ μ΄λ λ§μμ νΈ κ³νμ νκ³ μμ΅λλ€. μ΄ λ§μμ λͺ¨λ μ§λ€μ μλ κ·Έλ¦Όκ³Ό κ°μ΄ λκ·Έλκ² λ°°μΉλμ΄ μμ΅λλ€.
κ° μ§λ€μ μλ‘ μΈμ ν μ§λ€κ³Ό λ°©λ²μ₯μΉκ° μ°κ²°λμ΄ μκΈ° λλ¬Έμ μΈμ ν λ μ§μ νΈλ©΄ κ²½λ³΄κ° μΈλ¦½λλ€.
κ° μ§μ μλ λμ΄ λ΄κΈ΄ λ°°μ΄ moneyκ° μ£Όμ΄μ§ λ, λλμ΄ νμΉ μ μλ λμ μ΅λκ°μ return νλλ‘ solution ν¨μλ₯Ό μμ±νμΈμ.
μ νμ¬ν
-
μ΄ λ§μμ μλ μ§μ 3κ° μ΄μ 1,000,000κ° μ΄νμ λλ€.
-
money λ°°μ΄μ κ° μμλ 0 μ΄μ 1,000 μ΄νμΈ μ μμ λλ€.
π― μ΄λ»κ² νμλ
Backtrackingμ μ΄μ©ν 첫λ²μ§Έ μλ (0/ 100) => μ νμ±μ λͺ¨λ μκ° μ΄κ³Ό, ν¨μ¨μ±μ λͺ¨λ ν΅κ³Ό π βοΈπ βοΈπ
class Solution { private static int max = Integer.MIN_VALUE; private static int sum = 0; public int solution(int[] money) { int n = money.length; boolean[] visited = new boolean[n]; backtrack(visited, money, 0, n / 2); return max; } public void backtrack(boolean[] visited, int[] money, int lev, int limit) { if(limit == lev) { max = Math.max(max, sum); return; } for(int i = 0; i < money.length; i++) { int left = (i == 0) ? money.length - 1 : i - 1; int right = (i == money.length - 1) ? 0 : i + 1; if(visited[i] == false) { visited[left] = true; visited[right] = true; visited[i] = true; sum += money[i]; backtrack(visited, money, lev + 1, limit); } visited[left] = false; visited[right] = false; visited[i] = false; sum -= money[i]; } } }
DPλ₯Ό μ΄μ©ν μ΅μ’ μ½λ
class Solution { public int solution(int[] money) { int n = money.length; int[] arr = new int[n]; int result1, result2; // result1 => (0 ~ n - 2)κΉμ§ arr[0] = money[0]; arr[1] = Math.max(money[0], money[1]); for(int i = 2; i < n - 1; i++) { arr[i] = Math.max(money[i] + arr[i - 2], arr[i - 1]); } result1 = arr[n - 2]; // result2 => (1 ~ n - 1)κΉμ§ arr[1] = money[1]; arr[2] = Math.max(money[1], money[2]); for(int i = 3; i < n; i++) { arr[i] = Math.max(money[i] + arr[i - 2], arr[i - 1]); } result2 = arr[n - 1]; return Math.max(result1, result2); } }
π§ μ μ λ κ² νμλ
Backtrackingμ μ΄μ©ν 첫λ²μ§Έ μλ
λͺ¨λ μ§μ κ°μ§κ³ μλ λμ΄ 0 μ΄μμ΄λ€. κ·Έλμ λλμ μΌλ°μ μΌλ‘ λ§μ μ§μ νΈμλ‘ λ λ§μ λμ νμΉ μ μλ€. κ·Έλ¬λ λλμ μλ‘ μΈμ ν μ§μ νΈ μ μλ€. μ΄λ° μν©μμ λ§μ½ λ§μμ nκ°μ μ§μ΄ μλ€λ©΄ λλμ μ΅λν λ§μ λμ νμΉκΈ° μν΄ n / 2κ°μ μ§μ νΈμ΄μΌ νλ€. μ΄λ₯Ό μκ°ννλ©΄ λ€μκ³Ό κ°κ³ μ΄λ backtrackingμ μ΄μ©ν΄μ ꡬννκΈ°μ μμ±λ§μΆ€μ΄λ€.
νμ§λ§ λ¬Έμ λ ν¨μ¨μ΄μλ€. λͺ¨λ κ²½μ°λ₯Ό λ€ νμΈνκΈ° λλ¬Έμ μ ννμ§λ§ λ리λ€. κ°μ ν νμκ° μμλ€.
DPλ₯Ό μ΄μ©ν μ΅μ’ μ½λ
λ§μμ μ§λ€μ΄ λκ·Έλκ² λ°°μΉλμ΄ μλ κ²μ΄ μλλΌ μΌλ ¬λ‘ λ°°μΉλμ΄ μλ€κ³ κ°μ νμ.
λ§μ½ λλμ΄ ν μ§μ© μ°¨λ‘λλ‘ λ°©λ¬Ένλ©΄μ νΈμ§ λ§μ§λ₯Ό κ²°μ νλλ° λ€μκ³Ό κ°μ΄ λλ²μ§Έ μ§μ λ°©λ¬Ένλ€κ³ κ°μ ν΄λ³΄μ. μ΄λ λλμ΄ λλ²μ§Έ μ§μ ν΄λ€λ©΄ 첫λ²μ§Έ μ§μ νΈ μ μλ€. λ°λλ‘ λλμ΄ λλ²μ§Έ μ§μ νΈμ§ μλλ€λ©΄ 첫λ²μ§Έ μ§μ νΈ μ μλ€.
μ΄λ₯Ό ν΅ν΄ μ°λ¦¬λ λλμ (λλ²μ§Έ μ§μ νΈμμ λ μ»μ μ μλ κΈμ‘ + 0λ²μ§Έ μ§μ νΈμμ λ μ»μ μ μλ λ)μ΄ (첫λ²μ§Έ μ§μ νΈμμ λ μ»μ μ μλ κΈμ‘)λ³΄λ€ ν΄ λ λλ²μ§Έ μ§μ νΈμ΄μΌ νλ€λ κ²μ μ μ μλ€.
μ΄λ₯Ό λ νμ₯μν€λ©΄ λλμ΄ nλ²μ§Έ μ§μ νΈμ΄μΌ νλ κΈ°μ€μ (nλ²μ§Έ μ§μ νΈμμ λ μ»μ μ μλ κΈμ‘ + n - 2λ²μ§Έ μ§κΉμ§ νμΈν΄μ μ»μ μ μλ μ΅λμ κΈμ‘)μ΄ (n-1λ²μ§Έ μ§κΉμ§ νμΈν΄μ μ»μ μ μλ μ΅λμ κΈμ‘)μ΄λΌλ μ¬μ€μ μ μ μλ€.
νμ§λ§ μ°λ¦¬μ μν©μ μμ μ‘°κΈ λ€λ₯΄λ€. λ§μμ μΌλ ¬λ‘ λ°°μΉλμ΄ μμ§ μκ³ λκ·Έλκ² λ°°μΉλμ΄ μλ€.
κ·Έλμ 0λ²μ§Έ μ§μ νΈλ©΄ n-1λ²μ§Έ μ§μ νΈ μ μλ€. λ°λλ‘ 0λ²μ§Έ μ§μ νΈμ§ μμΌλ©΄ n-1λ²μ§Έ μ§μ νΈ μ μλ€.
μ΄λ₯Ό μκ°ννλ©΄ λ€μκ³Ό κ°κ³ μ΄λ₯Ό ν΅ν΄ μ°λ¦¬λ 0λ²μ§Έ μ§λΆν° n-2λ²μ§Έ μ§κΉμ§ νΈμμ λ μ»μ μ μλ μ΅λμ κΈμ‘κ³Ό 1λ²μ§Έ μ§λΆν° n-1λ²μ§Έ μ§κΉμ§ νΈμμ λ μ»μ μ μλ μ΅λμ κΈμ‘ μ€ λ ν° κΈμ‘μ κ³ λ₯΄λ©΄ λλ€λ κ²μ μ μ μλ€.
π 무μμ λ°°μ λ
'Algo RhythmπΊπ > Programmers' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Algo RhythmπΊπ] νλ‘κ·Έλλ¨Έμ€ - κΈ°μ§κ΅ μ€μΉ (0) 2022.09.24 [Algo RhythmπΊπ] νλ‘κ·Έλλ¨Έμ€ - μ«μ κ²μ (0) 2022.09.24 [Algo RhythmπΊπ] νλ‘κ·Έλλ¨Έμ€ κ³ λμ kit λ±κ΅£κΈΈ (0) 2020.08.06 [Algo RhythmπΊπ] νλ‘κ·Έλλ¨Έμ€ κ³ λμ kit μ μ μΌκ°ν (0) 2020.08.04 [Algo RhythmπΊπ] νλ‘κ·Έλλ¨Έμ€ κ³ λμ kit μμ° (0) 2020.07.30 -