중복된 문자 제거
def solution(my_string):
answer = ''
ex_letter = set(my_string)
for i in my_string:
if i in ex_letter:
answer += i
ex_letter.discard(i)
return answer
정답
def solution(my_string):
answer = ''
exclusive_letters = set(my_string) # set은 그 자체로 중복을 제거합니다.
for letter in my_string:
if letter in exclusive_letters: # O(1)의 빠른 containment test
answer += letter # 앞쪽부터 차례로 이어붙이고
exclusive_letters.discard(letter) # 쓴 것은 제외해줍니다. O(1)
return answer
한번만 등장한 문자
def solution(s):
letters = list(s)
answer_list = []
for i in letters:
if letters.count(i) == 1 :
answer_list.append(i)
answer_list.sort()
answer = ''.join(answer_list)
return answer
정답
def solution(s):
letters = list(s) # 스트링을 리스트로 쪼개는 방법
answer_list = []
for letter in letters:
if letters.count(letter) == 1:
answer_list.append(letter)
answer_list.sort()
answer = ''.join(answer_list)
return answer
숫자 문자열과 영단어
def solution(s):
nums = {
'zero': '0', 'one': '1', 'two': '2',
'three': '3', 'four': '4', 'five': '5',
'six': '6', 'seven': '7', 'eight': '8', 'nine': '9'
}
for n in nums:
s = s.replace(n, nums[n])
return int(s)
신고결과 받기
'''
문제 조건 정리
1명 -> 한번에 1명씩 제한없이 신고 가능.
-> 1명 여러번 신고 가능 but, 1회로 처리.
k번 신고당함 -> 정지, 신고한 유저들에게 메일로 발송함. (자료구조로 id저장하고 있어야.)
정지먹을때마다 보내는게 아니라, 전체 input이 다 주어지고나서 취합해서 메일을 보냄.
원하는 자료구조 모양 -> frodo가 muzi에게 여러번 신고당해도 1로 체크만 되길 원함. (가산되길 원하면 +=1로 수정가능)
{'frodo' :
{'muzi':1,
'appeach':1,
}
}
frodo가 신고를 받았는데, muzi, appeach가 신고했다는 뜻.
취합은 report_dict[id_value]의 len을 돌려서 k이상인지 판별하고, 된다면 그 key들을 돌려서(dict에 대한 for loop은 key를 대상으로 돌려줍니다.) id list에 넣어주기.
'''
def solution(id_list, report, k):
report_dict = {key: {} for key in id_list} # id:dict 형식으로 자료구조생성 (순서를 유지하는 dict의 성질을 이용, O(1)탐색을 위함). "신고받은" 사람 입장의 자료구조.
mail_dict = {key: 0 for key in id_list} # 마지막 검사, 순서맞춰주기 위한 dict 생성. "신고한" 사람 입장에서 들어오는 메일을 세주기 위한 새로운 자료구조 생성.
for report_item in report: # report안에 있는 모든 report_item에 대한 for loop
reporter, reported = report_item.split() # reporter가 reported를 신고한다. space로 구분되어있으니 split 메소드 사용.
report_dict[reported][reporter] = 1 # 신고당한 id가 주가 되는 자료구조를 미리 짜두었음. -> reported가 신고를 당했는데, reporter가 신고를 했다는걸 1로 체크한다.
for each_id in id_list:
if len(report_dict[each_id]) >= k: # 취합하면서 "신고받은" 사람의 value를 보면 {'muzi' : 1, 'appeach' : 1}로 되어있어 len이 2가됨을 만족하니, muzi와 appeach에게 메일을 보내야한다.
for key in report_dict[each_id].keys(): # muzi, appeach만 뽑은 iterable한 객체를 for loop. (dict의 keys메소드는 key들을 뽑아서 iterable한 객체로 반환합니다.)
mail_dict[key] += 1 # 메일을 받게 된다는 뜻으로 += 1
answer = list(mail_dict.values()) # 처음에 주어진 id_list순서를 유지하면서, 메일 개수가 가산된 자료구조인 mail_dict에서 value만 필요하므로, values메소드를 사용.
return answer'Study Language > Python' 카테고리의 다른 글
| python - PCCP 2,3일차 (1) | 2024.01.09 |
|---|---|
| 파이썬 메서드 정리 (0) | 2024.01.06 |