• 분류 전체보기 (512)
    • 개발남노씨(Coding Test) (6)
    • 고농축 백엔드 (17)
    • 재귀함수 DFS 총정리 (1)
    • 프론트엔드 날개달기:Vuejs.React (1)
    • 훈훈한 javascript (5)
    • 렛츠기릿 자바스크립트 (18)
    • 나도코딩 (1)
      • 웹 스크래핑 (1)
    • 프로그래머스(자바스크립트) (41)
      • LV.0(자바스크립트) (41)
    • 프로그래머스(자바) (121)
      • LV.0(자바) (56)
      • LV.1(자바) (41)
      • LV.2(자바) (23)
    • 프로그래머스(파이썬) (127)
      • LV.0(파이썬) (46)
      • LV.1(파이썬) (51)
      • LV.2(파이썬) (30)
    • 임시저장소 (31)
    • 프로젝트 (0)
    • 자바 알고리즘 (13)
      • 알고리즘 직빵 자바 문법 (10)
      • String(문자열) (3)
    • 파이썬 알고리즘 (93)
      • 알고리즘 직빵 파이썬 문법 (20)
      • 알고리즘 백준 (2)
      • 파이썬 알고리즘(사고력기르기) (6)
      • 파이썬 탐색 & 시물레이션 (8)
      • 이분탐색 & 그리디 알고리즘 (10)
      • 스택, 큐, 해쉬, 힙 (10)
      • 완전탐색과 DFS기초 (12)
      • DFS, BFS 활용 (19)
      • 동적계획법 (6)
    • 자바 (27)
      • Java TPC(생각하고, 표현하고, 코딩하고) (17)
      • Java (중요하고, 이해 안 되고, 어려운) (10)
    • 스프링 (5)
      • 스프링 MVC 패턴 2편 (5)
hELLO · Designed By 정상우.
@@#@@

기록용 블로그

프로그래머스(자바)/LV.2(자바)

뉴스 클러스터링→substring(), 정규식, 이중for문+교집합★★

2022. 12. 28. 20:36

나의 풀이

import java.util.*;
class Solution {
    public int solution(String str1, String str2) {
        ArrayList<String> str1Array = new ArrayList<>();
        ArrayList<String> str2Array = new ArrayList<>();

        for (int i = 0; i < str1.length()-1; i += 1) {
            String sub1 = str1.substring(i, i + 2).toUpperCase();
            if (sub1.matches("^[a-zA-Z]*$")) {
                str1Array.add(sub1);
            }
        }

        for (int i = 0; i < str2.length()-1; i += 1) {
            String sub2 = str2.substring(i, i + 2).toUpperCase();
            if (sub2.matches("^[a-zA-Z]*$")) {
                str2Array.add(sub2);
            }
        }
//        System.out.println((str1Array));
//        System.out.println((str2Array));


        ArrayList<String> hap = new ArrayList<>();
        ArrayList<String> gyo = new ArrayList<>();


        for(int i=0; i <str1Array.size(); i++){
            for(int j=0; j<str2Array.size(); j++){
                if(str1Array.get(i).equals(str2Array.get(j))){
                    gyo.add((str1Array.get(i)));
                    str1Array.remove(i);
                    str2Array.remove(j);
                    //만약에 i=2 일때 str1Array의 요소가 삭제되었다면, i=3 있는 요소가 한칸 앞으로 땡겨지므로, 다음 for문을 돌때도 다시 i=2를 유지될 수 있도록 한다.
                    i--;
                    //교집합 요소가 지워졌다면, break해서 str1Array의 standard를 다시 정한다.
                    break;
                }
            }
        }

//        System.out.println((str1Array));
//        System.out.println((str2Array));


        //이중 for문을 돌고 나서
        //str1Array는 A-B의 순수한 A만 남아있고, str2Array는 B-A의 순수한 B만 남아있다.
;       hap.addAll(str1Array);
        hap.addAll(str2Array);
        hap.addAll(gyo);


        float zacquard;
        float gyoNumber = gyo.size();
        float hapNumber = hap.size();
        if(str1Array.size()==0 & str2Array.size()==0) {
            zacquard = 65536*1;
        } else if (gyoNumber==0 && hapNumber>0) {
            return 0;
            
        } else {

            zacquard = gyoNumber / hapNumber ;
            zacquard = zacquard * 65536;
        }

        int answer = (int) zacquard;
        return answer;

    }
}

▶subString(A, B)  A부터 B직전까지 슬라이싱한다. A,B는 인덱스를 의미한다. 

 

 

 

▶ ^[a-zA-Z]*$" 이 정규식의 의미  

 

▶ 영문 알파벳 대문자와 소문자로만 이루어진 문자열을 검색하는 패턴입니다.

▶ 이 정규식은 일반적인 정규식 구조를 가지고 있습니다. 이 정규식은 다음과 같은 요소들로 이루어져 있습니다:

1. ^ : 이 문자는 시작 위치를 의미합니다.

   이 정규식에서는 문자열의 시작 위치에서 일치하는 패턴을 찾기 위해 사용됩니다.

2. [a-zA-Z] : 이 정규식은 영문 알파벳 대문자와 소문자를 의미합니다.

    즉, 이 정규식은 영문 알파벳 대문자와 소문자로만 이루어진 문자열을 찾습니다

 

3.*: 이 문자는 앞서 설명한 요소가 0개 이상 존재한다는 의미입니다. 

     이 정규식에서는 [a-zA-Z]* 라고 하면, 영문 알파벳 대문자와 소문자가 0개 이상 존재한다는 의미입니다.

     즉, 영문 알파벳 대문자와 소문자가 없는 문자열도 가능하고,

     영문 알파벳 대문자와 소문자가 여러개가 있는 문자열도 가능합니다

 

4. $ : 이 문자는 문자열의 끝을 의미합니다. 

    이 정규식에서는 영문 알파벳 대문자와 소문자가 0개 이상 존재한다는 의미로 사용되었기 때문에,

    이 정규식은 영문 알파벳 대문자와 소문자로만 이루어진 문자열이 완전히 끝나야 한다는 의미입니다.

 

아래와 같은 경우 

str1= [AA, AA]
str2= [AA, AA, AA]

 

hap=3 이고, gyo=2이다.  합집합이 5가 아님에 주의한다. 

 

 

인간적으로 너무 어렵다.ㅠ.ㅠ

 

 

저작자표시 비영리 변경금지 (새창열림)

'프로그래머스(자바) > LV.2(자바)' 카테고리의 다른 글

전화번호 목록→ String문자열의 정렬 sort()의 개념★★  (0) 2023.01.02
타켓넘버→ 지역변수는 인스턴스변수★  (0) 2022.12.30
프린터★→ 순서쌍을 사용X, 기능개발과 유사★★+while(true)  (0) 2022.12.28
기능개발→ 나누기★ + 미친 for문★ +cnt★  (0) 2022.12.27
위장→replaceAll() : 요소 전부 +1하기, 요소 전부 곱하기★ +map함수이용(count)★  (1) 2022.12.27
    '프로그래머스(자바)/LV.2(자바)' 카테고리의 다른 글
    • 전화번호 목록→ String문자열의 정렬 sort()의 개념★★
    • 타켓넘버→ 지역변수는 인스턴스변수★
    • 프린터★→ 순서쌍을 사용X, 기능개발과 유사★★+while(true)
    • 기능개발→ 나누기★ + 미친 for문★ +cnt★
    @@#@@
    @@#@@
    자바, 스프링, 알고리즘, 깃허브, 파이썬

    티스토리툴바