Publish:

νƒœκ·Έ: , , , , ,

μΉ΄ν…Œκ³ λ¦¬:

img_3.png

문제

문제 링크

img_3.png

풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
  public int solution(String[][] clothes) {
    int answer = 1;
    HashMap<String, Integer> map = new HashMap<>();
    for (int i = 0; i < clothes.length; i++) {
      map.put(clothes[i][1], map.getOrDefault(clothes[i][1], 0) + 1);
    }

    for (int count : map.values()) {
      answer *= count + 1;
    }

    return answer - 1;
  }
}

img_4.png

λ¬Έμ œμ—μ„œ 처럼 μ’…λ₯˜ λ³„λ‘œ λͺ‡ κ°œμ”© μžˆλŠ”μ§€ μ €μž₯ν•  HashMap 을 λ§Œλ“ λ‹€.

μ’…λ₯˜ 갯수
μ–Όκ΅΄ 2
μƒμ˜ 1
ν•˜μ˜ 1
κ²‰μ˜· 1

map.put(clothes[i][1], map.getOrDefault(clothes[i][1], 0) + 1); μ΄λ ‡κ²Œ ν•˜λ©΄ key 에 옷의 μ’…λ₯˜κ°€ λ“€μ–΄κ°€κ³ , value 둜 갯수λ₯Ό 넣을 수 μžˆλ‹€. getOrDefault() λ©”μ†Œλ“œλŠ” 킀에 λŒ€ν•œ 값이 있으면 κ·Έ 값을 λ°˜ν™˜ν•˜κ³  μ—†μœΌλ©΄ 0을 λ°˜ν™˜ν•œλ‹€. 계속 1μ”© λŠ˜λ €κ°€μ•Ό ν•˜λ―€λ‘œ +1 을 ν•΄μ€€λ‹€.

λ§Œμ•½ A μ’…λ₯˜ μ˜μƒμ΄ 3개, B μ’…λ₯˜ μ˜μƒμ΄ 2개인 경우λ₯Ό μƒκ°ν•΄λ³΄μž.

  • A λ˜λŠ” B 만 μž…λŠ” 경우 : 3 + 2
  • A 와 B λ₯Ό μ„žμ–΄ μž…λŠ” 경우 : 3 * 2
  • 총 μ‘°ν•© 갯수 : 3 + 2 + (3 * 2) = 11 개

A μ’…λ₯˜μ˜ μ˜μƒμ΄ a1, a2, a3 이 있고, B μ’…λ₯˜μ˜ μ˜μƒμ΄ b1, b2 μΌλ•Œ 선택 λ°©λ²•μ˜ μˆ˜λŠ” μ˜μƒμ€ λ‹€μŒκ³Ό 같이 선택 ν•  수 μžˆλ‹€.

  • A μ’…λ₯˜ 선택 방법 : μ„ νƒμ•ˆν•¨ / a1 / a2 / a3 (총 4 가지)
  • B μ’…λ₯˜ 선택 방법 : μ„ νƒμ•ˆν•¨ / b1 / b2 (총 3 가지)

그러면 A 와 B 의 총 μ‘°ν•© μˆ˜λŠ” (A μ’…λ₯˜ 선택 방법) * (B μ’…λ₯˜ 선택 방법) = 12 κ°œκ°€ λ‚˜μ˜¨λ‹€. μ—¬κΈ°μ„œ λ‘˜λ‹€ 선택 μ•ˆν•˜λŠ” 경우의 수 1 을 λΉΌμ£Όλ©΄ 11 이 λ‚˜μ˜¨λ‹€.

총 μ˜μƒ 선택 경우의 수 : (A μ’…λ₯˜ + 1) * (B μ’…λ₯˜ + 1) - 1

이것을 μ½”λ“œλ‘œ κ΅¬ν˜„ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

1
2
3
4
5
6
// (A + 1)(B + 1)...
int answer = 1;
for (int count : map.values()) {
  answer *= count + 1;
}
return answer - 1;
λ°©λ¬Έν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€! λŒ“κΈ€,지적,ν”Όλ“œλ°± μ–Έμ œλ‚˜ ν™˜μ˜ν•©λ‹ˆλ‹€πŸ˜Š

λŒ“κΈ€λ‚¨κΈ°κΈ°