Algorithm 211

[Python] 뉴스 클러스터링

# 두글자씩 끊은 다중집합 만들기 def make_set(str): str_set = [] for i in range(len(str)-1): temp = str[i:i+2] # 두글자씩 끊기 if temp.isalpha(): # 글자에 기호나 숫자 없다면 str_set.append(temp) # 추가 return str_set def solution(str1, str2): str1 = str1.upper() # 대소문자 차이 무시하므로 둘다 대문자로 변환 str2 = str2.upper() str1_set = make_set(str1) # 각 문자열 다중집합으로 만들기 str2_set = make_set(str2) intersection = 0 # 교집합 계산 for i in str1_set: if i ..

[Python] 전화번호 목록

def solution(phone_book): phone_book.sort() for i, num in enumerate(phone_book) : l = len(num) if num == phone_book[i+1][:l] : return False if i == len(phone_book)-2 : return True 풀이 1. phone_book을 정렬한다. 좀 더 빠르게 파악할 수 있다. 예) ["12","45","56","123","1235","567","88"] 이면 ['12', '123', '1235', '45', '56', '567', '88']으로 정렬된다. 2. for문과 enumerate()를 통해 인덱스(i)와 번호(num)을 받아와 바로 다음(i+1)에 있는 숫자의 접두사이면 Fal..

[Python] 예산

def solution(d, budget): count = 0 d.sort() for num in d : budget -= num if budget < 0 : break count += 1 return count 풀이 적은 예산을 신청한 부서들부터 차례로 예산을 나누어 주는 것이 최대한 많은 부서를 지원해줄 수 있게 된다. 따라서 sort함수를 통해 부서 리스트를 정렬하고 적은 예산을 신청한 부서부터 반복문을 통해 예산에서 빼주고, count해준다. 그리고 예산이 0보다 작아진다면 반복문을 멈춘다.

[Python] 음양 더하기

def solution(absolutes, signs): answer = 0 for num, sign in zip(absolutes, signs) : if sign : answer += num else : answer += -num return answer 풀이 zip 함수를 이용한다면 간단하게 풀 수 있는 문제이다. ✔︎ zip 함수 : 동일한 개수로 이루어진 자료형을 묶어 주는 역할을 하는 함수이다. >>> list(zip([1, 2, 3], [4, 5, 6])) [(1, 4), (2, 5), (3, 6)] >>> list(zip([1, 2, 3], [4, 5, 6], [7, 8, 9])) [(1, 4, 7), (2, 5, 8), (3, 6, 9)] for문을 이용한다면 튜플을 하나씩 반환하고, 해당..

[Python] 폰켓몬

def solution(nums): l = len(nums) / 2 k = len(set(nums)) return k if k < l else l 풀이 1. set함수를 이용해 nums에 있는 중복 폰켓몬들을 제거한다. 그렇게 된다면 nums에는 폰켓몬들이 각각 한 종류씩만 남게 된다. 2. 그 갯수가 " nums에 있는 폰켓몬의 수 / 2 " 보다 작다면 k(폰켓몬의 종류 수) 를 반환하고, 가져갈 수 있는 폰켓몬의 수보다 크다면 l(최대 가져갈 수 있는 폰켓몬의 수)을 반환한다. 참고할만한 다른 분의 풀이 def solution(nums): return min(len(nums)//s, len(set(nums)))