https://school.programmers.co.kr/learn/courses/30/lessons/17677?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이방법
- 문자열을 받아서 char 배열로 만든다.
- 앞부터 두개씩 잘라서 보고 둘다 알파벳이라면 대문자로 바꿔서 각각의 map에 있는지 검사한다.
- map에 없으면 value값을 1로저장
- map에 있다면 value값을 +1 값으로 저장
- 맵 값을 전부 순회하며 aNum, bNum, n 값을 채운다 (순서대로 str1의 총개수, str2의 총개수, 교집합개수)
- aNum 과 bNum값이 모두 0이라면 65536 을 리턴하고, 아니라면 계산식을 리턴한다.(655536 * n / (aNum+bNum-n))
소스코드
import java.util.*;
class Solution {
public int solution(String str1, String str2) {
int answer = 0;
//문자열을 char 배열로 바꾼다
char[] str1Arr = str1.toCharArray();
char[] str2Arr = str2.toCharArray();
HashMap<String,Integer> map1 = new HashMap<>();
HashMap<String,Integer> map2 = new HashMap<>();
for(int i = 0; i< str1.length()-1; i++) {
char c1 = str1Arr[i];
char c2 = str1Arr[i+1];
if((('a'<=c1 && c1<='z') || ('A'<=c1 && c1<='Z')) && (('a'<=c2 && c2<='z') || ('A'<=c2 && c2<='Z'))) {
//둘다 알파벳이면 map에 추가
String str = (c1+""+c2).toUpperCase();
if(map1.containsKey(str)) { //이미 있으면
map1.put(str, map1.get(str)+1);
}else {
map1.put(str,1);
}
}
}
for(int i = 0; i< str2.length()-1; i++) {
char c1 = str2Arr[i];
char c2 = str2Arr[i+1];
if((('a'<=c1 && c1<='z') || ('A'<=c1 && c1<='Z')) && (('a'<=c2 && c2<='z') || ('A'<=c2 && c2<='Z'))) {
//둘다 알파벳이면 map에 추가
String str = (c1+""+c2).toUpperCase();
if(map2.containsKey(str)) { //이미 있으면
map2.put(str, map2.get(str)+1);
}else {
map2.put(str,1);
}
}
}
int aNum = 0;
int bNum = 0;
int n = 0; //교집합 개수
for(String key : map1.keySet()) {
aNum += map1.get(key);
if(map2.containsKey(key)) { //b에 키 값이 있으면
n += Math.min(map1.get(key), map2.get(key));
}
}
for(String key : map2.keySet()) {
bNum += map2.get(key);
}
if(aNum==0 && bNum==0) {
return 65536;
}else {
return (65536 * (n) / (aNum+bNum-n));
}
}
}
결과
'Algorithm > java' 카테고리의 다른 글
백준 2015 JAVA : 수들의 합4 (0) | 2024.01.15 |
---|---|
백준 1407 JAVA : 2로 몇 번 나누어질까 (0) | 2024.01.10 |
프로그래머스: [1차] 캐시 (1) | 2023.08.22 |
프로그래머스 : 괄호 변환 (1) | 2023.08.22 |
백준 14722 JAVA : 우유 도시 (0) | 2023.07.12 |