728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/84512
코드
def createScore(num):
score = [1]
for i in range(num-1):
score.append(score[i]*num+1)
score.reverse()
return score
def solution(word):
score = [781,156,31,6,1]
#score = createScore(5) # a,e,i,o,u
answer = 0
alphaToNum = list()
for w in word:
if w=='A':
alphaToNum.append(1)
elif w=='E':
alphaToNum.append(2)
elif w=='I':
alphaToNum.append(3)
elif w=='O':
alphaToNum.append(4)
elif w=='U':
alphaToNum.append(5)
for idx, n in enumerate(alphaToNum):
answer+= (n-1)*score[idx] +1
return answer
이거는 문제 해석하는게 조금 어려웠어요. AAAE다음에 AAAI인지 AAAEA인지 헷갈렸어요. 여러분들은 어떠셨나요?
질문하기 보니까 AAAEA가 맞다고 하더라고요.
이걸 보면 규칙이 있죠. 저는 이 규칙이 너무 알고 싶었어요. A->E가 781인 거는. 예제 중에 I가 1562길래. A의 번호인 1을 빼주고, /2했어요.
규칙은 이 친구의 도움이 있었습니다.
[781, 156, 31, 6, 1]
answer+= (n-1)*score[idx] +1 # AEIOU->12345
즉, A(1번)->E(2번)로 가는 것은 한 칸 이동한 것이므로, 781+1을 해주면 되고, A->I로 가는 것은 두 칸 이동한 것이므 781*2 +1을 해주면 되는 겁니다.
EIO는 숫자로 바꾸면 234로 바꿀 수 있습니다. AAA(111)에서 123칸 씩 움직인 것이므로, 781*1 + 156*2 + 31*3을 해주면 되겠죠?
5진수라 생각하면 편하실 것 같아요.
번외
다 풀고 다른 사람 풀이 보는데 누가 하드코딩으로 리스트에 싹 다 담아놓은거에요ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 힘들게 풀어서 몸과 정신 망신창이인데. 저거 보고 빡빡 웃었습니다.
코딩 계의 피라미드
끗
'python > 백준_프로그래머스' 카테고리의 다른 글
[프로그래머스] 해시-의상 (python) 눈물나는 삽질쇼 (0) | 2023.09.05 |
---|---|
[백준 1100번] 하얀 칸 python과 eval 함수 (4) | 2022.02.04 |
[백준 2039번] 일곱 난쟁이 python과 combinations (0) | 2022.02.03 |
[백준 1026번] 보물 python과 리스트 정리 (0) | 2022.02.02 |
[백준 11047번] 동전0(그리디 알고리즘) python (0) | 2022.01.05 |