728x90
https://school.programmers.co.kr/learn/courses/30/lessons/17677
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
728x90
메모리: 79.4 MB, 시간: 1.86 ms
사용 알고리즘: 구현
import java.util.*;
class Solution {
public int solution(String str1, String str2) {
// str1의 다중집합
Map<String, Integer> set1 = new HashMap<>();
getSet(str1, set1);
// str2의 다중집합
Map<String, Integer> set2 = new HashMap<>();
getSet(str2, set2);
// 교집합 갯수 구하기
int andSet = 0;
for(String key : set1.keySet()) {
andSet += Math.min(set1.getOrDefault(key, 0), set2.getOrDefault(key, 0));
}
// 합집합 갯수 구하기
int orSet = 0;
for(String key : set1.keySet()) {
orSet += Math.max(set1.getOrDefault(key, 0), set2.getOrDefault(key, 0));
}
for(String key : set2.keySet()) {
if(set1.get(key) == null)
orSet += set2.get(key);
}
// 다중집합 구하기
int answer;
if(orSet == 0) answer = 65536;
else answer = andSet * 65536 / orSet;
return answer;
}
private void getSet(String str, Map<String, Integer> set) {
String tmp;
for(int i = 1; i < str.length(); i++) {
// 알파벳이 아닐 경우 넘어가기
if(!(str.charAt(i - 1) >= 'a' && str.charAt(i - 1) <= 'z')
&& !(str.charAt(i - 1) >= 'A' && str.charAt(i - 1) <= 'Z')) continue;
if(!(str.charAt(i) >= 'a' && str.charAt(i) <= 'z')
&& !(str.charAt(i) >= 'A' && str.charAt(i) <= 'Z')) continue;
tmp = str.substring(i - 1, i + 1).toUpperCase();
set.put(tmp, set.getOrDefault(tmp, 0) + 1);
}
}
}728x90
'Problem Solving > Programmers' 카테고리의 다른 글
| [프로그래머스, 92335] k진수에서 소수 개수 구하기 (java) (1) | 2026.01.09 |
|---|---|
| [프로그래머스, 284530] 연도 별 평균 미세먼지 농도 조회하기 (mysql) (0) | 2026.01.07 |
| [프로그래머스, 150369] 택배 배달과 수거하기 (java) (0) | 2026.01.06 |
| [프로그래머스, 293261] 물고기 종류 별 대어 찾기 (mysql) (0) | 2026.01.03 |
| [프로그래머스, 132265] 롤케이크 자르기 (java) (0) | 2025.12.16 |