PYTHON: 알파벳 리스트, is의 개체식별 기능, 딕셔너리 활용 문제

2024. 10. 13. 19:22Troubleshooting

 

01 알파벳으로 이루어진 리스트 생성하기


문제 URL: 둘만의 암호

 

tip. chr()함수로 알파벳 리스트를 간단하게 생성한다.

def solution(s, skip, index):
    # 1. 알파벳 리스트(a-z) 생성
    search = [chr(i) for i in range(97, 123)]
    result = []

    # 2. skip에 해당하는 알파벳 제거
    for i in skip:
        if i in search:
            search.remove(i)

    # 3. 각 문자에 대해 새로운 문자 계산: 인덱스 갱신
    for e in s:
    	# % len(search)로 최대 인덱스 초과 처리 포함
        new_index = (search.index(e) + index) % len(search)
        result.append(search[new_index])

    return ''.join(result)

tip. 참고코드: 집합{}에 포함된 차집합과 중복제거 기능을 유용하게 사용한다. 특히 import string에서 set( string.ascii_lowercase) 알파벳을 set집합으로 만들어서 바로 skip을 제거한 다음 sorted정렬 후 자동 리스트로 만들었다.

def solution(s, skip, index):
    answer = ''
    import string
    alpha = set(string.ascii_lowercase)
    skip = set(skip)
    letters = sorted(alpha-skip)
    
    for a in s:
        n = letters.index(a)
        m = (n+index) % len(letters)
        answer += letters[m]
        
    return answer

 

02 햄버거 만들기


문제 URL: 햄버거 만들기

 

tip. 메인 리스트에 지속적인 수정 사항이 존재하기에 새로운 리스트를 생성해서 문제를 해결한다.

ingredient = [2, 1, 1, 2, 3, 1, 2, 3, 1]
hamburger = [1,2,3,1]
temp = []
makeit = 0
for i in ingredient:
    temp.append(i)
    if temp[-4:] == hamburger:
        makeit += 1
        del temp[-4:]
print(makeit)

인사이트 1. is는 개체식별기능이다. 메모리 상에서 동일한 객체인지 확인한다. 동일한 리스트 객체를 가리키고 있는지 확인할 수 있다.

a = [1, 2, 3]
b = a
print(a is b)  # True

a = [1, 2, 3]
b = [1, 2, 3]
print(a is b)  # False

a = [1, 2, 3]
b = [1, 2, 3]
print(a == b)  # True

인사이트 2. del은 특정 인덱스, remove는 요소 직접 삭제

ingredient = [2, 1, 1, 2, 3, 1, 2, 3, 1]
del ingredient[-4:]
print(ingredient)  # [2, 1, 1, 2, 3]

인사이트 3. 반복 중 다음 차례의 요소가 사라진다면 제외하고 계속해서 실행한다.

temp = ['a','b','c','d','e']
for i in temp:
    if i == 'c':
        temp.remove('d')
    print(i)  # a b c e

 

03 성격 유형 검사하기


문제 URL: 성격 유형 검사하기

 

tip. 두 번 이상 쓰이는 변수는 리스트로 저장해서 사용하면 성능상 약간의 개선이 가능하다.

survey=["TR", "RT", "TR"]
choices=[7, 1, 3]

score={1:3,2:2,3:1,4:0,5:1,6:2,7:3}
mbti={'R':0,'T':0,'C':0,'F':0,'J':0,'M':0,'A':0,'N':0}
mbti_list=['RT','CF','JM','AN']
result=[]

for i,e in enumerate(survey):
    choice = choices[i]  # 두 번 이상 쓰이니까 변수저장 재사용
    if choices[i] <= 3:
        mbti[e[0]]=mbti[e[0]]+score[choice]
    else:  # 조건은 else로 퉁쳐도 된다.
        mbti[e[1]]=mbti[e[1]]+score[choice]

for  word in mbti_list:  # 중복 변수의 사용 피하기
    if mbti[ word[0]] > mbti[ word[1]]:
        result.append( word[0])
    elif mbti[ word[0]] < mbti[ word[1]]:
        result.append( word[1])
    else:
        result.append(min( word[0], word[1]))

print(''.join(result))