KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.
이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.
✔️ 제출 쿼리
✔️ 쿼리 분석
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 문자열과 정확히 일치
[.] : 마침표(.)를 의미
> 정규표현식에서 마침표(.)는 모든 문자를 의미하므로,
이를 문자 그대로 인식시키기 위해 대괄호([]) 안에 마침표 표현
$ : 문자열의 끝을 의미
✔️ 제출 코드
✔️ 코드 분석
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
# 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 문자열과 정확히 일치
[.] : 마침표(.)를 의미
> 정규표현식에서 마침표(.)는 모든 문자를 의미하므로,
이를 문자 그대로 인식시키기 위해 대괄호([]) 안에 마침표 표현
$ : 문자열의 끝을 의미
set()
함수를 이용하는 방법 : ) # 각 유저가 신고한 유저 목록 (중복 제거하기 위해 set 사용)
report_dict = {user: set() for user in id_list}
.item()
함수로 키, 값 쌍을 각각의 변수에 넣고,# 신고 횟수가 k 이상인 유저를 suspended 집합에 추가
suspended = {user for user, count in report_count.items() if count >= k}