본문 바로가기
Algorithm/Programmers

[Programmers / Level2] 모음 사전

by 개복취 2024. 2. 29.

https://school.programmers.co.kr/learn/courses/30/lessons/84512

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


 

문제를 보자마자 순열조합을 사용해야겠다고 생각했다.

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 반복 가능한 객체의 요소를 대상 리스트에 개별적으로 추가합니다.