2610. Convert an Array Into a 2D Array With Conditions

  • 문제 μ„€λͺ…을 μš”μ•½ν•˜λ©΄ 배열에 μžˆλŠ” 숫자λ₯Ό λ‹€μŒκ³Ό 같은 쑰건을 λ§Œμ‘±ν•˜λŠ” set으둜 λ¬ΆλŠ” 방법을 μ°ΎλŠ” 것이닀.
    • 각 set에 ν¬ν•¨λœ μˆ«μžλŠ” μ€‘λ³΅λœ 것이 μ—†μ–΄μ•Ό ν•œλ‹€.
    • set의 μˆ«μžκ°€ μ΅œμ†Œκ°€ λ˜λŠ” 쑰합을 μ°Ύμ•„μ•Ό ν•œλ‹€.
  • 배열에 μžˆλŠ” 숫자의 μΆœν˜„λΉˆλ„λ₯Ό μ„ΈλŠ” λ°©μ‹μœΌλ‘œ ν•΄κ²°ν•  수 μžˆλ‹€.
    • 쑰건을 보면 배열에 ν¬ν•¨λœ 숫자의 λ²”μœ„λŠ” 1 λΆ€ν„° λ°°μ—΄μ˜ κΈΈμ΄κΉŒμ§€μ΄λ‹€. 이점을 μ΄μš©ν•˜μ—¬ λ°°μ—΄ 숫자의 μΆœν˜„ λΉˆλ„λ₯Ό μ…€ 수 μžˆλŠ” λ©”λͺ¨λ¦¬ 곡간 counter을 ν• λ‹Ήν•œλ‹€.
    • 배열에 μžˆλŠ” λͺ¨λ“  숫자의 μΆœν˜„ λΉˆλ„λ₯Ό μ„Όλ‹€.
    • λͺ¨λ“  숫자λ₯Ό μ²˜λ¦¬ν•  λ•ŒκΉŒμ§€ λ‹€μŒ μž‘μ—…μ„ λ°˜λ³΅ν•œλ‹€.
      • μƒˆλ‘œμš΄ set을 ν• λ‹Ήν•œλ‹€.
      • 각 숫자 i의 μΆœν˜„ λΉˆλ„λ₯Ό ν™•μΈν•˜μ—¬ μΆœν˜„ λΉˆλ„ κ°’ count[i]이 0이 μ•„λ‹ˆλΌλ©΄ set에 λ„£κ³  μΆœν˜„ λΉˆλ„ 값을 1 κ°μ†Œ μ‹œν‚¨λ‹€.
class Solution { public List<List<Integer>> findMatrix(int[] nums) { int[] counter = new int[nums.length + 1]; int allCount = 0; for (int num : nums) { ++counter[num]; ++allCount; } List<List<Integer>> result = new ArrayList<>(); while (allCount > 0) { List<Integer> subResult = new ArrayList<>(); for (int i = 0; i < counter.length; ++i) { if (counter[i] > 0) { --counter[i]; --allCount; subResult.add(i); } } result.add(subResult); } return result; } }
  • λ˜λŠ” λ³„λ„μ˜ λ©”λͺ¨λ¦¬ 곡간 없이 배열을 μ •λ ¬ν•œ λ’€ μΆœν˜„ λΉˆλ„ count에 따라 ν•΄λ‹Ήλ˜λŠ” set에 λ„£λŠ” 방법도 μžˆλ‹€.
    • λ°°μ—΄μ˜ 크기 쑰건 1 ≀ nums.length ≀ 200 이 맀우 μž‘μ•„μ„œ 사싀 λ©”λͺ¨λ¦¬ 곡간 λ©΄μ—μ„œ λ³„λ‘œ 이점은 μ—†κ³  μ‹€ν–‰ μ‹œκ°„ λ©΄μ—μ„œ μ•½κ°„ λΆˆλ¦¬ν•˜λ‹€.
class Solution { public List<List<Integer>> findMatrix(int[] nums) { List<List<Integer>> result = new ArrayList<>(); int prev = -1; int count = 0; Arrays.sort(nums); for (int num : nums) { if (prev != num) count = 0; if (result.size() == count) result.add(new ArrayList<>()); result.get(count++).add(num); prev = num; } return result; } }
Β