- Uniqueν μ«μλ‘ μ΄λ£¨μ΄μ§ λ°°μ΄
arr
μ΄ μ£Όμ΄μ‘μ λ λ€μ 쑰건μ λ§μ‘±νλ λΆλΆ μ§ν© μ€ κ°μ₯ ν¬κΈ°κ° ν° κ²μ ꡬνλ λ¬Έμ . - λΆλΆ μ§ν©μμ μμμ 2κ° μ«μ
a
, b
λ₯Ό ννμ λ a % b == 0
λλ b % a == 0
μ λ§μ‘±νλ€.
- λ°°μ΄μ μ λ ¬νμ¬ νμ΄μΌ λλ€λ κ² κΉμ§λ μμλλ° λΆλΆ μ§ν©μ ꡬμ±νλ λ°©μμ κ³ λ―Όνλ€κ° λ°©λ²μ΄ μκ°λμ§ μμμ ν΄λ΅μ 보μλ€.
- λ°°μ΄μ μννλ©΄μ νμ¬ μ«μλ₯Ό κΈ°μ€μΌλ‘ λ ν° λΆλΆ μ§ν©μ ꡬμ±νλ μ«μλ₯Ό μ°Ύμλ΄λ λ°©μμΌλ‘ νμ΄μΌ νλ€.
- λ¨Όμ λ°°μ΄μ μ€λ¦μ°¨μμΌλ‘ μ λ ¬νλ€.
- κ° index λ³λ‘ λΆλΆ μ§ν©μ ν¬κΈ°
subsetSizeList
μ νμ¬ μ«μμ λ°λ‘ μ§μ μ«μμ λν index prevIndexList
λ₯Ό κΈ°λ‘νλ€. - νμ¬ μ«μ
nums[i]
λ₯Ό κΈ°μ€μΌλ‘ μμͺ½μ μλ μ«μ nums[j] (j = 0, 1, β¦, i - 1)
λ₯Ό μννλ©΄μ 쑰건μ λ§μ‘±νλ μ«μ nums[i] % nums[j] == 0
λ₯Ό μ°Ύλλ€. - 쑰건μ λ§μ‘±νλ μ«μ μ€ λΆλΆ μ§ν©μ ν¬κΈ°κ° κ°μ₯ ν¬κ² λ§λλ μ«μλ₯Ό μ ννμ¬ λΆλΆ μ§ν©μ ν¬κΈ°μ ν΄λΉ μ«μμ indexλ₯Ό κΈ°λ‘νλ€.
- λ§μ§λ§ index
maxIndex
λ³΄λ€ νμ¬ indexμ λΆλΆ μ§ν©μ ν¬κΈ°κ° λ ν¬λ€λ©΄ νμ¬ indexλ₯Ό λ§μ§λ§ indexλ‘ νλ€.
- λ§μ§λ§ indexλΆν° μ΄μ index λ°°μ΄
prevIndexList
μ μννλ©΄μ μ 체 λΆλΆ μ§ν©μ λ§λ€μ΄λΈλ€.
class Solution {
public List<Integer> largestDivisibleSubset(int[] nums) {
Arrays.sort(nums);
int n = nums.length;
int[] subsetSizeList = new int[n];
int[] prevIndexList = new int[n];
int maxIndex = 0;
for(int i = 0; i < n; ++i) {
int subsetSize = 1;
int prevIndex = -1;
for(int j = 0; j < i; ++j) {
if(nums[i] % nums[j] == 0) {
int newSubsetSize = subsetSizeList[j] + 1;
if(newSubsetSize > subsetSize) {
subsetSize = newSubsetSize;
prevIndex = j;
}
}
}
subsetSizeList[i] = subsetSize;
prevIndexList[i] = prevIndex;
if(subsetSize > subsetSizeList[maxIndex]) {
maxIndex = i;
}
}
List<Integer> result = new ArrayList();
for (int i = maxIndex; i != -1; i = prevIndexList[i]) {
result.add(nums[i]);
}
return result;
}
}