일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 삼성SW역량테스트
- java
- 컴퓨터 비전
- Lv3
- 2022 KAKAO BLIND RECRUITMENT
- dp
- 자바
- 프로그래머스
- VAR
- 자바스크립트
- kotlin
- 호이스팅
- js
- 브루트포스
- 2021 KAKAO BLIND RECRUITMENT
- 구현
- 유니온파인드
- 2023 KAKAO BLIND RECRUITMENT
- const
- 백준
- BFS
- 동적계획법
- 누적합
- level3
- level2
- 코틀린
- 컴퓨터비전
- 2018 KAKAO BLIND RECRUITMENT
- JavaScript
- lv2
Archives
- Today
- Total
코드를 느껴바라
Lv.2 뉴스 클러스터링 [JAVA] 본문
반응형
문제 링크
성공 여부(걸린 시간): 성공 (45분)
아이디어
처음에 문제를 제대로 읽지 않고 풀다가 놓친점들을 좀 강조해서 설명을 해보자면
문제의 조건
- 대소문자 달라도 같은 알파벳이라면 같은 것으로 취급
- 다중집합도 가능해야함
- 집합 둘 다 공집합이라면 유사도는 1이다.
사실 이 두개를 염두하지 않고 코드를 짠 것이 20분을 잡아먹었다.
크게 로직은 이러하다.
ArrayList은 총 3개로 이루어진다.
str1의 2개씩 잘린 알파벳만을 포함하는 문자열의 집합
str2의 2개씩 잘린 알파벳만을 포함하는 문자열의 집합
그 둘을 모두 가지는 합집합
그런다음 A나 B를 기준으로 순회하며 다른 집합에 존재하는 교집합을 세어주고 상대 집합에서 해당 원소를 빼준다.
나는 A를 기준으로 했음
그렇게 교집합의 수를 구했다면
자카드 유사도를 구해주면 되는데 여기서 합집합의 개수는 sum의 사이즈에서 교집합의 수를 빼주면 된다.
그리고 교집합은 아까 구한값으로 넣고 return해주면 되는데
문제에서 둘다 공집합이라면 자카드 유사도가 1이니 65536로 리턴해주는 그 예외만 처리해주면 된다.
정답 코드
import java.util.*;
class Solution {
public int solution(String str1, String str2) {
ArrayList<String> A= new ArrayList<>();
ArrayList<String> B= new ArrayList<>();
ArrayList<String> sum= new ArrayList<>();
for(int i=0; i<str1.length()-1; i++){
String temp = str1.substring(i, i+2);
if(isAlpha(temp.charAt(0))&&isAlpha(temp.charAt(1))){
temp = temp.toUpperCase();
A.add(temp);
sum.add(temp);
System.out.println("A: "+temp);
}
}
for(int i=0; i<str2.length()-1; i++){
String temp = str2.substring(i, i+2);
if(isAlpha(temp.charAt(0))&&isAlpha(temp.charAt(1))){
temp = temp.toUpperCase();
B.add(temp);
sum.add(temp);
System.out.println("B: "+temp);
}
}
int same = 0;
for(String x: A){
if(B.contains(x)){
B.remove(x);
same++;
}
}
System.out.println(same+", "+sum);
float answer = (float)same/(float)(sum.size()-same)*(float)65536;
return A.size()+B.size() ==0? 65536: (int)answer;
}
static boolean isAlpha(char x){
return (x>='A'&&x<='Z')||(x>='a'&&x<='z');
}
}
반응형
'PS > 프로그래머스(Programmers)' 카테고리의 다른 글
Lv.2 캐시 [JAVA] (0) | 2025.03.12 |
---|---|
Lv.2 프렌즈4블록 [JAVA] (3) | 2025.03.11 |
Lv.3 표 병합 [JAVA] (0) | 2025.03.08 |
Lv.3 보행자 천국 [JAVA] (3) | 2025.03.03 |
Lv.3 GPS [JAVA] - (2017 카카오코드페스티벌 본선) (0) | 2025.03.01 |