from itertools import product
def solution(word):
answer = 0
arr = ['A', 'E', 'I', 'O', 'U']
words = []
for i in range(1, 6):
for pr in product(arr, repeat = i):
words.append(''.join(pr))
words.sort()
return words.index(i) + 1
from itertools import product
solution = lambda word: sorted(["".join(c) for i in range(5) for c in product("AEIOU", repeat=i+1)]).index(word) + 1
![]
product
- 데카르트 곱을 표현할 때 사용하는 메소드이다.
- DB의 join처럼 join 사용한다.
- 2개 이상의 리스트의 모든 조합을 구할 때 사용한다.
- generator이기 때문에 list에 꼭 저장해야 한다.
완전탐색, 순열
- 순열을 이용한 풀이(다섯개의 문자로 만들수 있는 최대 크기가 5인 문자들)
- 계산이론 수업에서 비슷한 문제를 풀이했던 기억이 있어 금방 해결
- 다른 사람 풀이는 그냥 만들 수 있는 모든 조합을 만들고 정렬 시켰다...(문자 크기가 5이기 때문에 가능한 풀이)
def solution(people, limit):
answer = 0
people.sort()
left = 0
right = len(people)-1
while left <= right:
if people[left] + people[right] <= limit:
left += 1
right -= 1
else:
right -= 1
answer += 1
return answer
def solution(people, limit) :
answer = 0
people.sort()
a = 0
b = len(people) - 1
while a < b :
if people[b] + people[a] <= limit :
a += 1
answer += 1
b -= 1
return len(people) - answer
![]
그리디, 포인터
- 리스트 정렬하여 오른쪽 포인터(가장 큰)로 왼쪽 포인터(가장 작은)를 이동시켜 제한보다 작을 때 보트 수 ++1
- 다른 사람 풀이는 짝 지었을때만 2명씩 나가니까 전체 인원에서 짝지은 수만 빼주면 보트의 수인 점을 이용하였는데 천재다...