Algorithm/Programmers 73

[Python] 위장

def solution(clothes): dic = {} for i in clothes : if i[1] in dic : dic[i[1]] += 1 else : dic[i[1]] = 2 answer = 1 for j in dic.values() : answer *= j return answer -1 풀이 의상 종류를 세어 경우의 수를 구해주면 된다. 1. dic에 의상 종류에 따라 저장하고 해당 종류가 또 있다면 1을 더해준다. 2. dic에 저장된 의상 종류들의 모든 값(수)들을 곱하고 -1하여 반환한다. * 2부터 시작하고 -1하는 이유 : 의상종류가 3가지라고 가정했을 때, (a + 1)(b + 1)(c + 1) - 1 = (a + b + c) + (ab + bc + ca) + abc 다른 풀이 f..

[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보다 작아진다면 반복문을 멈춘다.