https://school.programmers.co.kr/learn/courses/30/lessons/84512
문제를 보자마자 순열조합을 사용해야겠다고 생각했다.
product(곱연산)을 사용해서 리스트에 정의시켜주고, 해당되는 값을 찾기위해 index 메소드를 사용하면 풀 수 있겠다고 생각했다.
<정해코드> - .extend() 메소드를 사용
from itertools import product
def solution(word):
words = []
vowels = 'AEIOU'
for i in range(1, 6):
words.extend([''.join(p) for p in product(vowels, repeat = i)])
words.sort()
return words.index(word) + 1
5자리의 수를 한 리스트에 넣어주기 위해 repeat의 인자 i를 1부터 5까지 돌려준다.
Python의 array Extend 메소드 사용법
정의?
Python의 extend 메소드는 리스트(list)에 사용되어, 한 리스트의 모든 요소를 다른 리스트의 끝에 추가합니다. 이 메소드는 원래 리스트를 변경(modify)합니다.
동일한 타입의 요소만 붙일 수 있고.. 원래의 리스트를 변경한다? 줄글로 봐서는 이해가 안간다. 아래와 같이 직접해봤다.
append 와의 차이점?
fruits = ['apple', 'banana', 'cherry']
fruits.append(['mango', 'grapes'])
print(fruits)
append에서 이리하면 결과값은..
['apple', 'banana', 'cherry', 'orange', ['mango', 'grapes']]
리스트의 형태가 그대로 보존되어 붙여지게 된다.
만약 위의상황에서 extend를 쓴다면? 동일한 코드로 한번 알아보자
fruits = ['apple', 'banana', 'cherry']
fruits.extend(['mango', 'grapes'])
print(fruits)
extend에서의 결과값은 다음과 같음
['apple', 'banana', 'cherry', 'mango', 'grapes']
기존의 리스트의 형태가 보존되지 않고 하나의 리스트의 형태로 변형(modify) 되었다!
<정해코드2> - 각 자리수마다 가중치를 줘서 모두 더하는 방법
def solution(word):
alphabet = {'A': 0, 'E': 1, 'I': 2, 'O': 3, 'U': 4}
# 가중치를 설정(1+5+25+125+625, 1+5+25+125, 1+5+25, 1+5, 1)
weights = [781, 156, 31, 6, 1]
total = 0
for i, char in enumerate(word):
value = alphabet[char]
total += value * weights[i]
return total + len(word)
각 알파벳마다 가중치를 두고 buffer + 전체 자릿수를 더해서 구할수도 있다.
각 자리수에 대한 가중치를 (1+5+25+125+625, 1+5+25+125, 1+5+25, 1+5, 1)로 두고 풀 수 있다.
요약…
- append는 단일 요소를 리스트의 끝에 추가하고, 추가되는 요소는 어떤 타입이든 상관없이 리스트의 새로운 아이템으로 취급됩니다.
- extend는 반복 가능한 객체의 각 요소를 대상 리스트에 개별적으로 추가합니다.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers / Level2] 뒤에 있는 큰 수 찾기 + 주식가격 (0) | 2024.03.04 |
---|---|
[Programmers / Level2] 게임 맵 최단거리 (1) | 2024.03.01 |
[Programmers / Level3] 야근지수 (2) | 2024.02.28 |
[Programmers / Level2] 캐시 (0) | 2024.01.30 |
[Programmers / Level2] 의상 (0) | 2024.01.29 |