[스파르타코딩클럽]데이터분석 과정/PYTHON
[Python 코드카타] 67~69번(프로그래머스)
doo_
2024. 1. 30. 15:45
67번 둘 만의 암호
> 처음 푼 방식 :
ex. ord(z) : 121이고 index가 20 cnt가 10 인 경우 문제 발생..ㅜ
def solution(s, skip, index):
answer = ''
for word in s:
cnt = 0
for i in range(1,index+1):
if ord(word)+i <= 122:
if chr(ord(word)+i) in skip:
cnt += 1
elif chr(ord(word)+i-26) in skip:
cnt +=1
if ord(word)+index+cnt > 122 :
answer += chr(ord(word)+index+cnt-26)
else :
answer += chr(ord(word)+index+cnt)
return answer
> 리스트 인덱스 방식 활용
def solution(s, skip, index):
answer = ''
# a~z까지의 문자를 세팅
az = ''
for i in range(ord('a'),ord('z')+1):
az += chr(i)
# 그 중에서 skip해당하는 문자들을 제거
azset = list(set(az) - set(skip))
# 정렬이 안 되어 있어서 정렬
azset.sort()
# idx 설정
for word in s :
idx = (azset.index(word)+index)%len(azset)
answer += azset[idx]
return answer
> 딕셔너리를 활용한 방법
def solution(s, skip, index):
result = ''
for i in range(ord('a'),ord('z')+1):
a_to_z += chr(i)
a_to_z -= set(skip)
a_to_z = sorted(a_to_z)
l = len(a_to_z)
dic_alpha = {alpha:idx for idx, alpha in enumerate(a_to_z)}
for i in s:
result += a_to_z[(dic_alpha[i] + index) % l]
return result
68번 햄버거 만들기
> 슬라이싱을 이용한 방법은 데이터가 큰 경우 시간초과발
def solution(ingredient):
answer = 0
# 1:빵 2:야채 3:고기
burger = []
for i in ingredient:
burger.append(i)
if burger[-4:] == [1,2,3,1]:
answer += 1
# for ~ pop 대신 del burger[-4:]도 가능
for n in range(4):
burger.pop()
return answer
69번 성격 유형 검사하기
> 딕셔너리 활용을 이해하고 적용해서 품
def solution(survey, choices):
answer = ''
# 1번 지표 : R - T
# 2번 지표 : C - F
# 3번 지표 : J - M
# 4번 지표 : A - N
indicate = {'R':0,'T':0,'C':0,'F':0,'J':0,'M':0,'A':0,'N':0}
for n in range(len(survey)):
if choices[n] < 4:
indicate[survey[n][0]] += (choices[n]*3)%4
elif choices[n] > 4:
indicate[survey[n][1]] += choices[n]%4
indicate_keys = list(indicate.keys())
for i in range(0,8,2):
if indicate[indicate_keys[i]] > indicate[indicate_keys[i+1]]:
answer += indicate_keys[i]
elif indicate[indicate_keys[i]] < indicate[indicate_keys[i+1]]:
answer += indicate_keys[i+1]
else :
answer += min(indicate_keys[i],indicate_keys[i+1])
return answer
> 여러 해답 중 깔끔하다고 생각한 답👏👏
def solution(설문_조사_배열, 선택지_배열):
지표 = {}
지표['RT'] = 지표['TR'] = {'R': 0, 'T': 0,}
지표['FC'] = 지표['CF'] = {'C': 0, 'F': 0,}
지표['MJ'] = 지표['JM'] = {'J': 0, 'M': 0,}
지표['AN'] = 지표['NA'] = {'A': 0, 'N': 0,}
점수 = {
'매우 비동의': 3,
'비동의': 2,
'약간 비동의': 1,
'모르겠음': 0,
'약간 동의': 1,
'동의': 2,
'매우 동의': 3,
}
비동의 = [1, 2, 3]
동의 = [5, 6, 7]
선택지 = {
1: '매우 비동의',
2: '비동의',
3: '약간 비동의',
4: '모르겠음',
5: '약간 동의',
6: '동의',
7: '매우 동의',
}
answer = ''
for 인덱스 in range(len(설문_조사_배열)):
비동의_캐릭터, 동의_캐릭터 = 설문_조사_배열[인덱스]
if 선택지_배열[인덱스] in 비동의:
지표[설문_조사_배열[인덱스]][비동의_캐릭터] += 점수[선택지[선택지_배열[인덱스]]]
continue
if 선택지_배열[인덱스] in 동의:
지표[설문_조사_배열[인덱스]][동의_캐릭터] += 점수[선택지[선택지_배열[인덱스]]]
결과_배열 = [지표['RT'].items(), 지표['FC'].items(), 지표['MJ'].items(), 지표['AN'].items()]
정렬된_배열 = []
for 결과 in 결과_배열:
정렬된_배열.append(sorted(결과, key=lambda x: -x[1]))
return ''.join([캐릭터_점수_튜플[0] for [캐릭터_점수_튜플, _] in 정렬된_배열])