문제
https://school.programmers.co.kr/learn/courses/30/lessons/17677
풀이
문제는 단순한데 자바 문자열에 익숙하지 않아 꽤 헤멘 문제이다.
처음에는 정규식을 이용해서 해당 문자가 영문인지 판단하였는데 나중에 찾아보니 Character.isLetter() 로 간단하게 판별할 수 있는 것을 알게되었다.
import java.util.*;
import java.io.*;
class Solution {
public int solution(String str1, String str2) {
int answer = 0;
str1 = str1.toLowerCase();
str2 = str2.toLowerCase();
List<String> st1 = new ArrayList<>();
List<String> st2 = new ArrayList<>();
// str1
for(int i = 0; i < str1.length()-1; i++) {
String tar = str1.substring(i, i+2);
// 확인
if(!String.valueOf(tar.charAt(0)).matches("^[a-zA-Z]*$")) {
continue;
}
if(!String.valueOf(tar.charAt(1)).matches("^[a-zA-Z]*$")) {
continue;
}
st1.add(tar);
}
// str2
for(int i = 0; i < str2.length()-1; i++) {
String tar = str2.substring(i, i+2);
// 확인
if(!String.valueOf(tar.charAt(0)).matches("^[a-zA-Z]*$")) {
continue;
}
if(!String.valueOf(tar.charAt(1)).matches("^[a-zA-Z]*$")) {
continue;
}
st2.add(tar);
}
Collections.sort(st1);
Collections.sort(st2);
List<String> union = new ArrayList<>();
List<String> inter = new ArrayList<>();
for(String str : st1) {
if(st2.remove(str)) {
inter.add(str);
}
union.add(str);
}
for(String str : st2) {
union.add(str);
}
if(union.size() == 0){
return 65536;
}
if(inter.size() == 0) {
return 0;
}
double temp = (double) inter.size()/ (double) union.size();
return (int) (temp * 65536);
}
}
'Problem Solving > CT-Java' 카테고리의 다른 글
[백준/그리디] 2457 공주님의 정원 - 자바 (0) | 2024.02.03 |
---|---|
[백준/DP] 2616 소형기관차 - 자바 (0) | 2024.02.03 |
[프로그래머스/구현] 77485 행렬 테투리 회전하기 - JAVA (0) | 2023.09.16 |
[프로그래머스/문자열] 60065 튜플 - JAVA (0) | 2023.09.16 |
[프로그래머스/문자열] 60057 문자열압축 - JAVA (0) | 2023.09.16 |