PYTHON: 알파벳 리스트, is의 개체식별 기능, 딕셔너리 활용 문제
2024. 10. 13. 19:22ㆍTroubleshooting
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))
'Troubleshooting' 카테고리의 다른 글
PYTHON: 시간 복잡도 측면에서 효율적인 코드 작성하기 (0) | 2024.10.03 |
---|---|
PYTHON: count(), if not~, strip(), import Counter, extend, set (0) | 2024.09.25 |
PYTHON: 리스트 컴프리헨션의 조건, map과 filter의 활용 예시 (1) | 2024.09.12 |
PYTHON: 중복 제거, 문자 위치 찾기, 파생 변수 생성, map(str,변수) (0) | 2024.09.12 |
PYTHON: 소수 만들기 (라이브러리 활용, 비활용편) (0) | 2024.09.05 |