Contents

μ˜μƒ (with.Java)

   Jun 3, 2024     2 min read

β€œμ˜μƒ (with.Java)” λ¬Έμ œμ— λŒ€ν•˜μ—¬ μ•Œμ•„λ³Έ κΈ€μž…λ‹ˆλ‹€.

μ½”λ”© ν…ŒμŠ€νŠΈ 문제λ₯Ό ν’€λ©°, ν’€μ—ˆλ˜ λ¬Έμ œμ— λŒ€ν•œ νšŒκ³ μ™€ λ‹€λ₯Έ 풀이 방법을 μ•Œμ•„λ³΄λ©°, μ•Œμ•„κ°€κ³ μž ν•©λ‹ˆλ‹€.

λ¬Έμ œμ— λŒ€ν•΄ λ¨Όμ € μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

문제

μ½”λ‹ˆλŠ” 맀일 λ‹€λ₯Έ μ˜·μ„ μ‘°ν•©ν•˜μ—¬ μž…λŠ”κ²ƒμ„ μ’‹μ•„ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ μ½”λ‹ˆκ°€ 가진 옷이 μ•„λž˜μ™€ κ°™κ³ , 였늘 μ½”λ‹ˆκ°€ λ™κ·Έλž€ μ•ˆκ²½, κΈ΄ μ½”νŠΈ, νŒŒλž€μƒ‰ ν‹°μ…”μΈ λ₯Ό μž…μ—ˆλ‹€λ©΄ λ‹€μŒλ‚ μ€ 청바지λ₯Ό μΆ”κ°€λ‘œ μž…κ±°λ‚˜ λ™κ·Έλž€ μ•ˆκ²½ λŒ€μ‹  κ²€μ • μ„ κΈ€λΌμŠ€λ₯Ό μ°©μš©ν•˜κ±°λ‚˜ ν•΄μ•Όν•©λ‹ˆλ‹€.

  • μ’…λ₯˜ 이름
  • μ–Όκ΅΄ λ™κ·Έλž€ μ•ˆκ²½, κ²€μ • μ„ κΈ€λΌμŠ€
  • μƒμ˜ νŒŒλž€μƒ‰ ν‹°μ…”μΈ 
  • ν•˜μ˜ 청바지
  • κ²‰μ˜· κΈ΄ μ½”νŠΈ

μ½”λ‹ˆλŠ” 각 μ’…λ₯˜λ³„λ‘œ μ΅œλŒ€ 1가지 μ˜μƒλ§Œ μ°©μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ μœ„ μ˜ˆμ‹œμ˜ 경우 λ™κ·Έλž€ μ•ˆκ²½κ³Ό κ²€μ • μ„ κΈ€λΌμŠ€λ₯Ό λ™μ‹œμ— μ°©μš©ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

μ°©μš©ν•œ μ˜μƒμ˜ 일뢀가 κ²ΉμΉ˜λ”λΌλ„, λ‹€λ₯Έ μ˜μƒμ΄ κ²ΉμΉ˜μ§€ μ•Šκ±°λ‚˜, ν˜Ήμ€ μ˜μƒμ„ μΆ”κ°€λ‘œ 더 μ°©μš©ν•œ κ²½μš°μ—λŠ” μ„œλ‘œ λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ μ˜·μ„ μ°©μš©ν•œ κ²ƒμœΌλ‘œ κ³„μ‚°ν•©λ‹ˆλ‹€.

μ½”λ‹ˆλŠ” ν•˜λ£¨μ— μ΅œμ†Œ ν•œ 개의 μ˜μƒμ€ μž…μŠ΅λ‹ˆλ‹€.

μ½”λ‹ˆκ°€ 가진 μ˜μƒλ“€μ΄ λ‹΄κΈ΄ 2차원 λ°°μ—΄ clothesκ°€ μ£Όμ–΄μ§ˆ λ•Œ μ„œλ‘œ λ‹€λ₯Έ 옷의 μ‘°ν•©μ˜ 수λ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ£Όμ„Έμš”.

μ œν•œμ‚¬ν•­

  • clothes의 각 행은 [μ˜μƒμ˜ 이름, μ˜μƒμ˜ μ’…λ₯˜]둜 이루어져 μžˆμŠ΅λ‹ˆλ‹€.
  • μ½”λ‹ˆκ°€ 가진 μ˜μƒμ˜ μˆ˜λŠ” 1개 이상 30개 μ΄ν•˜μž…λ‹ˆλ‹€.
  • 같은 이름을 가진 μ˜μƒμ€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • clothes의 λͺ¨λ“  μ›μ†ŒλŠ” λ¬Έμžμ—΄λ‘œ 이루어져 μžˆμŠ΅λ‹ˆλ‹€.
  • λͺ¨λ“  λ¬Έμžμ—΄μ˜ κΈΈμ΄λŠ” 1 이상 20 μ΄ν•˜μΈ μžμ—°μˆ˜μ΄κ³  μ•ŒνŒŒλ²³ μ†Œλ¬Έμž λ˜λŠ” - '_' 둜만 이루어져 μžˆμŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ μ˜ˆμ‹œ

clothesreturn
[[β€œyellow_hat”, β€œheadgear”], [β€œblue_sunglasses”, β€œeyewear”], [β€œgreen_turban”, β€œheadgear”]]5
[[β€œcrow_mask”, β€œface”], [β€œblue_sunglasses”, β€œface”], [β€œsmoky_makeup”, β€œface”]]3

λ¬Έμ œμ— λŒ€ν•œ λ‚˜μ˜ 풀이

import java.util.*;

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(String key : map.keySet()){
            answer *= map.get(key) + 1;
        }
        return answer - 1;
    }
}

풀이 리뷰

solution λ©”μ„œλ“œλŠ” 이차원 λ¬Έμžμ—΄ λ°°μ—΄ clothesλ₯Ό μž…λ ₯으둜 λ°›μŠ΅λ‹ˆλ‹€.

answer λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™”ν•˜κ³ , 결과값을 μ €μž₯ν•  κ²ƒμž…λ‹ˆλ‹€.

μ΄ˆκΈ°κ°’μ„ 1둜 μ„€μ •ν•˜λŠ” μ΄μœ λŠ” 아무 μ˜μƒλ„ μž…μ§€ μ•Šμ€ 경우λ₯Ό κ³ λ €ν•˜κΈ° μœ„ν•΄μ„œμž…λ‹ˆλ‹€.

HashMap<String, Integer> 객체 map을 μƒμ„±ν•©λ‹ˆλ‹€.

이 map은 μ˜μƒμ˜ μ’…λ₯˜λ₯Ό ν‚€λ‘œ 가지고, ν•΄λ‹Ή μ’…λ₯˜μ˜ μ˜μƒ 수λ₯Ό κ°’μœΌλ‘œ κ°€μ§‘λ‹ˆλ‹€.

첫 번째 for 루프λ₯Ό 톡해 clothes 배열을 μˆœνšŒν•˜λ©΄μ„œ 각 μ˜μƒμ˜ μ’…λ₯˜λ₯Ό ν‚€λ‘œ ν•˜μ—¬ map에 μΆ”κ°€ν•©λ‹ˆλ‹€. 이미 ν•΄λ‹Ή μ’…λ₯˜μ˜ μ˜μƒμ΄ μ‘΄μž¬ν•œλ‹€λ©΄ 값을 μ¦κ°€μ‹œν‚΅λ‹ˆλ‹€.

두 번째 for 루프λ₯Ό 톡해 map의 λͺ¨λ“  ν‚€λ₯Ό μˆœνšŒν•˜λ©΄μ„œ 각 μ˜μƒ μ’…λ₯˜λ³„λ‘œ κ°€λŠ₯ν•œ μ‘°ν•©μ˜ 수λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€.

각 μ˜μƒ μ’…λ₯˜λ³„λ‘œ κ°€λŠ₯ν•œ μ‘°ν•©μ˜ μˆ˜λŠ” ν•΄λ‹Ή μ’…λ₯˜μ˜ μ˜μƒμ„ μž…μ§€ μ•ŠλŠ” 경우λ₯Ό ν¬ν•¨ν•˜μ—¬ κ³„μ‚°ν•©λ‹ˆλ‹€. λ”°λΌμ„œ 각 μ˜μƒ μ’…λ₯˜λ³„ μ˜μƒ μˆ˜μ— 1을 λ”ν•˜κ³ , 결과값에 κ³±ν•΄μ€λ‹ˆλ‹€.

λͺ¨λ“  μ˜μƒ μ’…λ₯˜λ³„ κ°€λŠ₯ν•œ μ‘°ν•©μ˜ 수λ₯Ό κ³„μ‚°ν•œ ν›„μ—λŠ” λ§ˆμ§€λ§‰μ— 1을 λΉΌμ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€. μ΄λŠ” 아무 μ˜μƒλ„ μž…μ§€ μ•ŠλŠ” 경우λ₯Ό μ œμ™Έν•˜κΈ° μœ„ν•¨μž…λ‹ˆλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ 결과값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.