-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
c71bc8d
commit 81a5be2
Showing
2 changed files
with
84 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
""" | ||
문자열 리스트 string_list와 쿼리 리스트 query_list가 있을 때 | ||
각 쿼리 리스트에 있는 문자열이 string_list의 문자열 리스트에 있는지 여부를 확인해야 함 | ||
문자열 있으면 True, 없으면 False | ||
문자열의 존자 여부를 리스트 형태로 반환하는 solution() 함수를 작성 | ||
입력 문자열 영어 소문자로만 | ||
문자열 최대 길이 10^6 | ||
해시 충돌 X | ||
p = 31, m = 1,000,000,007 | ||
""" | ||
|
||
def find_hash(s, p = 31, m = 1_000_000_007): | ||
hash_value = 0 | ||
pp = 1 | ||
for c in s: | ||
hash_value = (hash_value + (ord(c) - ord('a') + 1) * pp) % m | ||
pp = (pp * p) % m | ||
return hash_value | ||
|
||
def solution(string_list, query_list): | ||
hash_set = set(find_hash(s) for s in string_list) | ||
|
||
result = [] | ||
for query in query_list: | ||
query_hash = find_hash(query) | ||
result.append(query_hash in hash_set) | ||
|
||
return result | ||
|
||
|
||
string_list = ["apple", "banana", "cherry"] | ||
query_list = ["banana", "kiwi", "melon", "apple"] | ||
# return = [True, False, False, True] | ||
|
||
print(solution(string_list, query_list)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
""" | ||
각 유저 한 번에 한 명 유저 신고 가능 | ||
횟수 제한 X, 서로 다른 유저 계속 신고 가능 | ||
여러 번 신고 가능 but, 1회로 처리 | ||
k번 이상 신고되면 게시판 이용 정지되고 신고한 모든 유저한테 정지 사실 메일 발송 | ||
신고 모든 내용 취합해 한꺼번에 게시판 이용 정지시키고 메일 발송 | ||
""" | ||
|
||
def solution(id_list, report, k): | ||
reported_user = {} | ||
count = {} | ||
|
||
for content in report: | ||
user_name, reported_name = content.split(" ") | ||
if reported_name not in reported_user: | ||
reported_user[reported_name] = {user_name} # 중복 피하려면 set으로 저장 | ||
else: | ||
reported_user[reported_name].add(user_name) # set에서는 .add() 사용 | ||
|
||
for user in id_list: | ||
count[user] = 0 | ||
|
||
for reported_name, reporters in reported_user.items(): | ||
if len(reporters) >= k: | ||
for reporter in reporters: | ||
count[reporter] += 1 | ||
|
||
result = list(count.values()) | ||
|
||
return result | ||
|
||
|
||
|
||
|
||
id_list1 = ["muzi", "frodo", "apeach", "neo"] | ||
report1 = ["muzi frodo", "apeach frodo", "frodo neo", "muzi neo", "apeach muzi"] | ||
k1 = 2 | ||
# result1 = [2, 1, 1, 0] | ||
|
||
print(solution(id_list1, report1, k1)) | ||
|
||
|
||
id_list2 = ["con", "ryan"] | ||
report2 = ["ryan con", "ryan con", "ryan con", "ryan con"] | ||
k2 = 3 | ||
# result2 = [0, 0] | ||
|
||
print(solution(id_list2, report2, k2)) |