์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค][lv2][1์ฐจ] ๋‰ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ง

hyunki.Dev 2023. 4. 12. 00:09

๐Ÿ“Œ ๋ฌธ์ œ

[1์ฐจ] ๋‰ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ง

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๐Ÿ“Œ ํ’€์ด

  • ๋ฌธ์ œ์—์„œ ์ œ์‹œํ•œ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
  • ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ํ•ต์‹ฌ์ ์ธ ๋ถ€๋ถ„์€ map์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ต์ง‘ํ•ฉ๊ณผ ํ•ฉ์ง‘ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.
  • ๋ฌธ์ œ์—์„œ min ๊ณผ max๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ต์ง‘ํ•ฉ๊ณผ ํ•ฉ์ง‘ํ•ฉ์„ ๊ตฌํ•˜๋Š” ํ’€์ด๋ฅผ ์•Œ๋ ค์ฃผ์—ˆ์œผ๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • ํ’€์ด์˜ ์ˆœ์„œ๋Š”
    • ๊ต์ง‘ํ•ฉ๊ณผ ํ•ฉ์ง‘ํ•ฉ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฃผ์–ด์ง„ String์„ ํ†ตํ•ด Map์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    • ์–‘์ชฝ map์— ๋™์ผํ•œ key๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ต์ง‘ํ•ฉ๊ณผ ํ•ฉ์ง‘ํ•ฉ์„ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
    • (๊ต์ง‘ํ•ฉ / ํ•ฉ์ง‘ํ•ฉ) * 65536 ์„ ์ด์šฉํ•˜์—ฌ ์ตœ์ข… ๊ฐ’์„ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค. 

 

๐Ÿ“Œ ์ฝ”๋“œ

import java.util.*;

class Solution {
    public int solution(String str1, String str2) {
        int answer = 0;
        double union = 0; //ํ•ฉ์ง‘ํ•ฉ
        double inter = 0; //๊ต์ง‘ํ•ฉ
        
        HashMap<String, Integer> map1 = new HashMap<>();
        HashMap<String, Integer> map2 = new HashMap<>();
        
        str1 = str1.toUpperCase();
        str2 = str2.toUpperCase();
        
        //๋‘๊ฐœ์˜ ์—ฐ๊ฒฐ๋œ ๋ฌธ์ž๋ฅผ key๊ฐ’์œผ๋กœ ๋ช‡ ๊ฐœ์ธ์ง€ ์…ˆํ•˜์—ฌ map์— ๋„ฃ์–ด์ค€๋‹ค.
        for(int i =0; i< str1.length() -1; i++){
            String s = str1.substring(i, i+2).replaceAll("[^A-Z]", "");
            if(s.length() < 2) continue;
            map1.put(s, map1.getOrDefault(s, 0) + 1);
        }
        
        for(int i =0; i< str2.length() -1; i++){
            String s = str2.substring(i, i+2).replaceAll("[^A-Z]", "");
            if(s.length() < 2) continue;
            map2.put(s, map2.getOrDefault(s, 0) + 1);
        }
        
        if(map1.size() == 0 && map2.size() == 0) return 65536;
        
        //๋ฌธ์ œ์—์„œ ์ œ์‹œํ•œ ํ’€์ด๋Œ€๋กœ ํ•ฉ์ง‘ํ•ฉ๊ณผ ๊ต์ง‘ํ•ฉ์„ ๊ตฌํ•œ๋‹ค.
        for(String key : map1.keySet()){
            if(map2.containsKey(key)){
                inter += Math.min(map1.get(key), map2.get(key));
                union += Math.max(map1.get(key), map2.get(key));
                map2.remove(key);
            } else {
                union += map1.get(key);
            }
        }
        
        for(String key : map2.keySet()){
            union += map2.get(key);
        }
        
        return (int) Math.floor((inter/union) * 65536);
    }
}