๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜

[2018 ์นด์นด์˜ค ๋ธ”๋ผ์ธ๋“œ ์ฑ„์šฉ] ๋‰ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ง

๋ฌธ์ œ

https://programmers.co.kr/learn/courses/30/lessons/17677

 

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

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

programmers.co.kr

 

์†Œ์Šค์ฝ”๋“œ

import java.util.PriorityQueue;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

class Solution {
    public int solution(String str1, String str2) {
        PriorityQueue<String> q1 = setQueue(str1);
        PriorityQueue<String> q2 = setQueue(str2);

        if(q1.isEmpty() && q2.isEmpty()) return 65536;

        double inter = 0, union = 0;
        while(!q1.isEmpty() && !q2.isEmpty()) {
            String s1 = q1.poll();
            String s2 = q2.poll();

            int cmp = s1.compareTo(s2);
            if(cmp == 0) inter++;
            else if(cmp < 0) q2.offer(s2);
            else q1.offer(s1);
            union++;
        }

        union += (q1.size() + q2.size());
        return (int)((inter/union)*65536);
    }
    
    public PriorityQueue<String> setQueue(String str) {
        return IntStream.rangeClosed(0, str.length()-2)
                .mapToObj((n) -> str.substring(n, n+2).toUpperCase())
                .filter(s -> s.matches("[a-zA-Z]{2}"))
                .collect(Collectors.toCollection(PriorityQueue::new));
	}
}

 

ํšŒ๊ณ 

- ๋น ๋ฅธ ๋น„๊ต๋ฅผ ์œ„ํ•ด ๋ฌธ์ž์—ด ์ •๋ ฌ์ด ํ•„์š”ํ–ˆ์Œ.