블로그 이미지
오정oI

카테고리

분류 전체보기 (119)
회사 - pj # 나라원 (1)
회사 - pj # 나라원 (2)
이직준비 2 (0)
이직준비 (10)
국비-클라우드 (1)
학점은행제 (0)
취미 (0)
주식 (0)
외국어 (0)
자격증 (14)
BigData_On (1)
BigData_Off1 (74)
클라우드 (0)
언어_Framework (1)
언어-Server (2)
언어_Client (0)
업무 (1)
IT참고서적 (1)
IT 최신 트랜드 (0)
제테크 (1)
Study Plan (2)
동영상 및 자료 (5)
여행 (1)
git (0)
Total
Today
Yesterday
반응형
SMALL

### 2022.10.18. 화

1) 불량 사용자 (48%)

=> 풀다 말음..,

=> 직접 해결 못함!

 

① 참고링크

https://velog.io/@hyunjkluz/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A464064-%EB%B6%88%EB%9F%89-%EC%82%AC%EC%9A%A9%EC%9E%90-Java

 

[프로그래머스/64064] 불량 사용자 (Java)

프로그래머스 64064 불량 사용자 Java DFS, 문자열

velog.io

 

② 관련 내용들 Check

* 관련 내용s

1. java 정규식
- 참고링크
https://hbase.tistory.com/160

 

[Java] 정규표현식 사용법 및 예제 - Pattern, Matcher

자바에서 정규표현식(Regular Expression)'을 사용해보자. 1. 정규표현식(Regular Expression) 정규표현식 혹은 정규식은 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용되는 언어다. 정규 표현식은

hbase.tistory.com

2. java HashSet
- 참고링크
https://crazykim2.tistory.com/474

 

3. 재귀함수 호출 로직
- 참고링크1
https://codechasseur.tistory.com/30

- 참고링크2
https://tyeolrik.github.io/data_structure/2017/01/21/6-basic-understanding-of-recursion.html

! 피보나치 수열 호출 흐름

피보나치 수열 호출 흐름

 

③ 코드

 

↓↓↓ 코드 복.붙

더보기

import java.util.*;
//import java.util.ArrayList;
//import java.util.HashSet;
import java.util.regex.Pattern;

class Solution {
    // 전역변수 선언
    HashSet<HashSet<String>> result;
    ArrayList<ArrayList<String>> bannedUserList;
    // 1.Main 함수
    public int solution(String[] user_id, String[] banned_id) {
        result = new HashSet<HashSet<String>>();
        bannedUserList = new ArrayList<ArrayList<String>>();
        
        System.out.println("1.banned_id:::" + Arrays.toString(banned_id));
        System.out.println("2.user_id:::" + Arrays.toString(user_id));
        for (String bannedId : banned_id) {
          // 목록의 n번째 칸에 들갈 수 있는 제재 아이디들 구함
          bannedUserList.add(getMatchesId(bannedId, user_id));
        }
        System.out.println("3.bannedUserList:::" + Arrays.deepToString(bannedUserList.toArray()));
        dfs(new HashSet<String>(), 0);
        
        System.out.println("5.result:::" + Arrays.deepToString(result.toArray()));
        
        //int answer = 0;
        return result.size();
    }
    
    // 2.정규식으로 banned_id 패턴 일치 user_id list 추출 
    public ArrayList<String> getMatchesId(String bannedId, String[] user_id) {
        // 불량 사용자 아이디 정규 표현식으로 변환
        // 정규 표현식에서 '.' = 임의의 문자열 1개
        String pattern = bannedId.replace('*', '.');
        System.out.println("pattern:::" + pattern);
       ArrayList<String> valueList = new ArrayList<>();

        for (String userId : user_id) {
          boolean isMatch = Pattern.matches(pattern, userId);

          // 정규 표현식 턴에 맞는 유저 아이디 담음
          if(isMatch){
            valueList.add(userId);
          }
        }
      
       return valueList;
    }
    
    // 3.user_id 경우의 수 추출 # 호출 : dfs(new HashSet<String>(), 0);
    public void dfs(HashSet<String> add, int depth) {

System.out.println("depth:::"+depth);
        if (depth == bannedUserList.size()) {
          // 결과 Set에 저장
          result.add(new HashSet<>(add));
          //System.out.println("5.result:::" + Arrays.deepToString(result.toArray()));  
          return;
        }
 
       // depth번째에 들어갈 수 있는 아이디 목록에서 뽑음
        for (String userId : bannedUserList.get(depth)) {
            System.out.println("userId(방문전):::"+userId);
            // 이미 목록에 들어가있으면 담지 않음
          if (!add.contains(userId)) {
            add.add(userId);
            dfs(add, depth + 1);
System.out.println("userId(방문후):::"+userId);
            add.remove(userId);
System.out.println("add(방문후):::"+Arrays.deepToString(add.toArray()));
          }
        }
        
        System.out.println("4.add(abc123):::" + Arrays.deepToString(add.toArray()));
        //System.out.println("3.bannedUserList:::" + Arrays.deepToString(add.toArray()));
    }
}

 

↓↓↓ 디버깅!

더보기

★☆★ 테스트 1 ★☆★
입력값 〉 ["frodo", "fradi", "crodo", "abc123", "frodoc"], ["fr*d*", "abc1**"]
기댓값 〉 2
실행 결과 〉 테스트를 통과하였습니다.
출력 〉

1.banned_id:::[fr*d*, abc1**]
2.user_id:::[frodo, fradi, crodo, abc123, frodoc]

pattern:::fr.d.
pattern:::abc1..
3.bannedUserList:::[[frodo, fradi], [abc123]]


depth:::0
userId(방문전):::frodo
depth:::1
userId(방문전):::abc123
depth:::2
userId(방문후):::abc123

add(방문후):::[frodo]
4.add(abc123):::[frodo]

userId(방문후):::frodo
add(방문후):::[]



userId(방문전):::fradi
depth:::1
userId(방문전):::abc123
depth:::2
userId(방문후):::abc123
add(방문후):::[fradi]
4.add(abc123):::[fradi]
userId(방문후):::fradi
add(방문후):::[]
4.add(abc123):::[]
5.result:::[[fradi, abc123], [abc123, frodo]]



★☆★ 테스트 2 ★☆★
입력값 〉 ["frodo", "fradi", "crodo", "abc123", "frodoc"], ["*rodo", "*rodo", "******"]
기댓값 〉 2
실행 결과 〉 테스트를 통과하였습니다.
출력 〉


1.banned_id:::[*rodo, *rodo, ******]
2.user_id:::[frodo, fradi, crodo, abc123, frodoc]

pattern:::.rodo
pattern:::.rodo
pattern:::......
3.bannedUserList:::[[frodo, crodo], [frodo, crodo], [abc123, frodoc]]
depth:::0
userId(방문전):::frodo
depth:::1
userId(방문전):::frodo
userId(방문전):::crodo
depth:::2
userId(방문전):::abc123
depth:::3
userId(방문후):::abc123
add(방문후):::[crodo, frodo]
userId(방문전):::frodoc
depth:::3
userId(방문후):::frodoc
add(방문후):::[crodo, frodo]
4.add(abc123):::[crodo, frodo]
userId(방문후):::crodo
add(방문후):::[frodo]
4.add(abc123):::[frodo]
userId(방문후):::frodo
add(방문후):::[]
userId(방문전):::crodo
depth:::1
userId(방문전):::frodo
depth:::2
userId(방문전):::abc123
depth:::3
userId(방문후):::abc123
add(방문후):::[crodo, frodo]
userId(방문전):::frodoc
depth:::3
userId(방문후):::frodoc
add(방문후):::[crodo, frodo]
4.add(abc123):::[crodo, frodo]
userId(방문후):::frodo
add(방문후):::[crodo]
userId(방문전):::crodo
4.add(abc123):::[crodo]
userId(방문후):::crodo
add(방문후):::[]
4.add(abc123):::[]
5.result:::[[crodo, frodo, frodoc], [crodo, abc123, frodo]]


★☆★ 테스트 3 ★☆★
입력값 〉 ["frodo", "fradi", "crodo", "abc123", "frodoc"], ["fr*d*", "*rodo", "******", "******"]
기댓값 〉 3
실행 결과 〉 테스트를 통과하였습니다.
출력 〉

1.banned_id:::[fr*d*, *rodo, ******, ******]
2.user_id:::[frodo, fradi, crodo, abc123, frodoc]
pattern:::fr.d.
pattern:::.rodo
pattern:::......
pattern:::......
3.bannedUserList:::[[frodo, fradi], [frodo, crodo], [abc123, frodoc], [abc123, frodoc]]
depth:::0
userId(방문전):::frodo
depth:::1
userId(방문전):::frodo
userId(방문전):::crodo
depth:::2
userId(방문전):::abc123
depth:::3
userId(방문전):::abc123
userId(방문전):::frodoc
depth:::4
userId(방문후):::frodoc
add(방문후):::[crodo, abc123, frodo]
4.add(abc123):::[crodo, abc123, frodo]
userId(방문후):::abc123
add(방문후):::[crodo, frodo]
userId(방문전):::frodoc
depth:::3
userId(방문전):::abc123
depth:::4
userId(방문후):::abc123
add(방문후):::[crodo, frodo, frodoc]
userId(방문전):::frodoc
4.add(abc123):::[crodo, frodo, frodoc]
userId(방문후):::frodoc
add(방문후):::[crodo, frodo]
4.add(abc123):::[crodo, frodo]
userId(방문후):::crodo
add(방문후):::[frodo]
4.add(abc123):::[frodo]
userId(방문후):::frodo
add(방문후):::[]
userId(방문전):::fradi
depth:::1
userId(방문전):::frodo
depth:::2
userId(방문전):::abc123
depth:::3
userId(방문전):::abc123
userId(방문전):::frodoc
depth:::4
userId(방문후):::frodoc
add(방문후):::[fradi, abc123, frodo]
4.add(abc123):::[fradi, abc123, frodo]
userId(방문후):::abc123
add(방문후):::[fradi, frodo]
userId(방문전):::frodoc
depth:::3
userId(방문전):::abc123
depth:::4
userId(방문후):::abc123
add(방문후):::[fradi, frodo, frodoc]
userId(방문전):::frodoc
4.add(abc123):::[fradi, frodo, frodoc]
userId(방문후):::frodoc
add(방문후):::[fradi, frodo]
4.add(abc123):::[fradi, frodo]
userId(방문후):::frodo
add(방문후):::[fradi]
userId(방문전):::crodo
depth:::2
userId(방문전):::abc123
depth:::3
userId(방문전):::abc123
userId(방문전):::frodoc
depth:::4
userId(방문후):::frodoc
add(방문후):::[crodo, fradi, abc123]
4.add(abc123):::[crodo, fradi, abc123]
userId(방문후):::abc123
add(방문후):::[crodo, fradi]
userId(방문전):::frodoc
depth:::3
userId(방문전):::abc123
depth:::4
userId(방문후):::abc123
add(방문후):::[crodo, fradi, frodoc]
userId(방문전):::frodoc
4.add(abc123):::[crodo, fradi, frodoc]
userId(방문후):::frodoc
add(방문후):::[crodo, fradi]
4.add(abc123):::[crodo, fradi]
userId(방문후):::crodo
add(방문후):::[fradi]
4.add(abc123):::[fradi]
userId(방문후):::fradi
add(방문후):::[]
4.add(abc123):::[]
5.result:::[[crodo, abc123, frodo, frodoc], [crodo, fradi, abc123, frodoc], [fradi, abc123, frodo, frodoc]]

★☆★ 테스트 4 ★☆★
입력값 〉 ["frodo", "fradi", "crodo", "abc123", "frodoc"], ["*rodo", "*rodo", "******", "******"]
기댓값 〉 1
실행 결과 〉 테스트를 통과하였습니다.
출력 〉


1.banned_id:::[*rodo, *rodo, ******, ******]
2.user_id:::[frodo, fradi, crodo, abc123, frodoc]
pattern:::.rodo
pattern:::.rodo
pattern:::......
pattern:::......
3.bannedUserList:::[[frodo, crodo], [frodo, crodo], [abc123, frodoc], [abc123, frodoc]]
depth:::0
userId(방문전):::frodo
depth:::1
userId(방문전):::frodo
userId(방문전):::crodo
depth:::2
userId(방문전):::abc123
depth:::3
userId(방문전):::abc123
userId(방문전):::frodoc
depth:::4
userId(방문후):::frodoc
add(방문후):::[crodo, abc123, frodo]
4.add(abc123):::[crodo, abc123, frodo]
userId(방문후):::abc123
add(방문후):::[crodo, frodo]
userId(방문전):::frodoc
depth:::3
userId(방문전):::abc123
depth:::4
userId(방문후):::abc123
add(방문후):::[crodo, frodo, frodoc]
userId(방문전):::frodoc
4.add(abc123):::[crodo, frodo, frodoc]
userId(방문후):::frodoc
add(방문후):::[crodo, frodo]
4.add(abc123):::[crodo, frodo]
userId(방문후):::crodo
add(방문후):::[frodo]
4.add(abc123):::[frodo]
userId(방문후):::frodo
add(방문후):::[]
userId(방문전):::crodo
depth:::1
userId(방문전):::frodo
depth:::2
userId(방문전):::abc123
depth:::3
userId(방문전):::abc123
userId(방문전):::frodoc
depth:::4
userId(방문후):::frodoc
add(방문후):::[crodo, abc123, frodo]
4.add(abc123):::[crodo, abc123, frodo]
userId(방문후):::abc123
add(방문후):::[crodo, frodo]
userId(방문전):::frodoc
depth:::3
userId(방문전):::abc123
depth:::4
userId(방문후):::abc123
add(방문후):::[crodo, frodo, frodoc]
userId(방문전):::frodoc
4.add(abc123):::[crodo, frodo, frodoc]
userId(방문후):::frodoc
add(방문후):::[crodo, frodo]
4.add(abc123):::[crodo, frodo]
userId(방문후):::frodo
add(방문후):::[crodo]
userId(방문전):::crodo
4.add(abc123):::[crodo]
userId(방문후):::crodo
add(방문후):::[]
4.add(abc123):::[]
5.result:::[[crodo, abc123, frodo, frodoc]]

 

④ Review

- 문제 구조도 그려보기!

: heap, stack, 전역변수 선언시 저장 공간?

- 다른 테스트 케이스 디버깅 더 해보기!

- 불량사용자 permutation(순열)으로 풀면??? (수학적 접근)

 

 

### 2022.10.24. 월

2) 이중우선순위큐 (60%)

① 사용 알고리즘 : 이중 우선순위 큐

3) 야근지수 (57%)

① 사용 알고리즘 : 이중 우선순위 큐

→  2), 3) 해당 링크

https://checkit3625.tistory.com/entry/Level-3-2

 

Level 3-2 ( 1)이중우선순위큐 2)야근 지수 )

### 2022.10.26. 수 1) 이중우선순위큐 (60%) ① 사용 알고리즘 : 이중 우선순위 큐 ② 참고 링크 - 우선순위 큐 직접 구현 https://hongjw1938.tistory.com/22 자료구조 - 우선순위 큐(Heap, Priority Queue) 1. 우선순위

checkit3625.tistory.com

 

 

* 효율성?

코드 짤 때 어느게 더 효율적일까?

 

- if (조건A  &&  조건B) {  실행 코드... }

=> 조건A, 조건 B 둘다 참이어야 실행되므로 조건A에 거짓을..,

 

- if (조건A  || 조건B)  실행 코드... }

=> 둘 중에 하나만 참이면 실행되므로 조건 A에 참을..,

 

 

 

반응형
LIST

'이직준비 > 목표1_코테1(2210)' 카테고리의 다른 글

Level 3-4 (Review)  (0) 2022.11.09
Level 3-2 ( 1)이중우선순위큐 2)야근 지수 )  (0) 2022.11.09
Level 2  (1) 2022.10.18
Level 1  (0) 2022.10.18
Level 0  (0) 2022.10.18
Posted by 오정oI
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함