KATA#51

codataffee·2024년 6월 2일
0

CODEKATA

목록 보기
51/114
post-thumbnail

WHAT IS KATA?

KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.

이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.


- SQL


✔️ 문제 #1: Find Users With Valid E-Mails

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT user_id
     , name
     , mail 
FROM Users
WHERE mail REGEXP '^[a-zA-Z][-a-zA-Z0-9_\.]*@leetcode[.]com$'

---

# mail REGEXP '^[a-zA-Z][-a-zA-Z0-9_\.]*@leetcode[.]com$'

^ : 문자열의 시작

[a-zA-Z] : 첫 번째 문자는 대문자(A-Z) 또는 소문자(a-z)

[-a-zA-Z0-9_\.]* : 첫 번째 문자 다음에 
하이픈(-), 대문자(A-Z), 소문자(a-z), 숫자(0-9), 밑줄(_), 
또는 마침표(.)

* : 앞의 패턴이 0번 이상 반복될 수 있음을 의미

@leetcode[.]com : @leetcode.com 문자열과 정확히 일치

[.] : 마침표(.)를 의미 
> 정규표현식에서 마침표(.)는 모든 문자를 의미하므로, 
이를 문자 그대로 인식시키기 위해 대괄호([]) 안에 마침표 표현

$ : 문자열의 끝을 의미


- PYTHON


✔️ 문제 #1: 신고 결과 받기

✔️ 제출 코드

✔️ 코드 분석

def solution(id_list, report, k):    
    # 각 유저가 신고한 유저 목록
    report_dict = {user: set() for user in id_list}
    # 각 유저가 신고당한 횟수 목록
    report_count = {user: 0 for user in id_list}
    
    # 신고한 유저(reporter)와 신고된 유저(reported)를 분리하여 report_dict에 추가
    for users in report:
        reporter, reported = users.split()
        report_dict[reporter].add(reported)
    
    # report_dict에 저장된 각 유저 신고 횟수를 report_count에 업데이트
    for reports in report_dict.values():
        for user in reports:
            report_count[user] += 1
    
    # 신고 횟수가 k 이상인 유저를 suspended 집합에 추가
    suspended = {user for user, count in report_count.items() if count >= k}
    
    # 각 유저가 신고한 유저 중 정지된 유저의 수를 세어 결과 리스트에 저장
    result = []
    for user in id_list:
        mail_count = len(report_dict[user] & suspended)
        result.append(mail_count)
    
    return result


✔️ CHECK POINT

  • SQL
    • 정규표현식으로 원하는 문자열을 가진 데이터 조회하기

# mail REGEXP '^[a-zA-Z][-a-zA-Z0-9_\.]*@leetcode[.]com$'

^ : 문자열의 시작

[a-zA-Z] : 첫 번째 문자는 대문자(A-Z) 또는 소문자(a-z)

[-a-zA-Z0-9_\.]* : 첫 번째 문자 다음에 
하이픈(-), 대문자(A-Z), 소문자(a-z), 숫자(0-9), 밑줄(_), 
또는 마침표(.)

* : 앞의 패턴이 0번 이상 반복될 수 있음을 의미

@leetcode[.]com : @leetcode.com 문자열과 정확히 일치

[.] : 마침표(.)를 의미 
> 정규표현식에서 마침표(.)는 모든 문자를 의미하므로, 
이를 문자 그대로 인식시키기 위해 대괄호([]) 안에 마침표 표현

$ : 문자열의 끝을 의미
  • PYTHON
    • 딕셔너리 컴프리헨션과 set() 함수를 이용하는 방법 : )
       # 각 유저가 신고한 유저 목록 (중복 제거하기 위해 set 사용)
       report_dict = {user: set() for user in id_list}
    • .item() 함수로 키, 값 쌍을 각각의 변수에 넣고,
      값이 k 이상이면 키를 추가하는 방법 : )
      # 신고 횟수가 k 이상인 유저를 suspended 집합에 추가
       suspended = {user for user, count in report_count.items() if count >= k}

profile
커피 좋아하는 데이터 꿈나무

0개의 댓글

관련 채용 정보