문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/17677
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 핵심
-문제가 너무 길다 생략
문제 풀이법
-각각 스트링을 두개씩 쪼갠다
쪼개면서 알파벳이 아닌것이 1글자라도 포함되면
그 두글자는 맵에 저장하지않는다 맵에는 해당 동일두글자가
몇번씩 있는지 체크해서 넣는다
교집합을 확인한다
합집합을 확인한다
코드
public static int solution(String str1, String str2) {
int answer = 0;
int maxLength = Math.max(str1.length(), str2.length());
Map<String, Integer> map1 = new LinkedHashMap<>();
Map<String, Integer> map2 = new LinkedHashMap<>();
for (int i = 0; i < maxLength - 1; i++) {
if (i < str1.length() - 1) {
String s1 = str1.substring(i, i + 2).toLowerCase();
if (s1.charAt(0) >= 'a' && s1.charAt(0) <= 'z' &&
s1.charAt(1) >= 'a' && s1.charAt(1) <= 'z') {
map1.put(s1, map1.getOrDefault(s1, 0) + 1);
}
}
if (i < str2.length() - 1) {
String s2 = str2.substring(i, i + 2).toLowerCase();
if (s2.charAt(0) >= 'a' && s2.charAt(0) <= 'z' &&
s2.charAt(1) >= 'a' && s2.charAt(1) <= 'z') {
map2.put(s2, map2.getOrDefault(s2, 0) + 1);
}
}
}
System.out.println(map1);
System.out.println(map2);
int go = 0;
int hap = 0;
List<String>temp=new ArrayList<>();
for (Map.Entry<String, Integer> entry : map1.entrySet()) {
String key = entry.getKey();
if (map2.containsKey(key)) {
go += Math.min(entry.getValue(), map2.get(key));
hap += Math.max(entry.getValue(), map2.get(key));
map2.remove(key);
}else{
temp.add(key);
}
}
for (Map.Entry<String, Integer> entry : map2.entrySet()) {
hap += entry.getValue();
}
for(String t: temp){
hap +=map1.get(t);
}
System.out.println(go + "," + hap);
double t=(double) go / hap;
if(hap==0&&go==0){
t=1;
}
answer = (int) (t * 65536);
System.out.println(answer);
return answer;
}
결과

gpt피드백
-List<String> temp = new ArrayList<>();
도 사실 없어도 돼. 합집합은 더 간단하게 계산 가능해.
네가 이미 go를 구했잖아. 그러면 다중집합에서도:
합집합 크기 = map1 전체 원소 수 + map2 전체 원소 수 - 교집합 크기
가 그대로 성립해.네 풀이는 정답이고 아이디어도 맞는데, 합집합 계산 부분을 훨씬 줄일 수 있다가 핵심 개선점이야.
배운점과느낀점
-아니 문제가 길어서 힘들다
교집합 /합집합 규칙이 헷갈려서 약간 헤맸다
'코테 > lvl2' 카테고리의 다른 글
| 프로그래머스 파일명정렬(lvl2) 풀어보기 (0) | 2026.09.12 |
|---|---|
| 프로그래머스 압축(lvl2) 풀어보기 (0) | 2026.09.12 |
| 프로그래머스 튜플(lvl2) 풀어보기 (0) | 2026.09.12 |
| 프로그래머스 주차 요금 계산(lvl2) 풀어보기 (0) | 2026.09.12 |
| 프로그래머스 뒤에 있는 큰 수 찾기(lvl2) 풀어보기 (0) | 2026.09.12 |