일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 우테코
- it 뉴스
- 싸피셜
- 백준
- it 이슈
- Java
- IT 동향
- IT 트렌드
- 코딩테스트 연습
- 네트워크 관리사
- 네트워크 관리사 2급
- 신문스크랩
- 코딩테스트
- java 객체지향 프로그래밍
- html
- KT
- SSAFY
- 프로그래머스
- 싸피
- 카카오
- SSAFY 7기
- 코테
- 백준위
- 리얼클래스
- SSAFYcial
- 신문 스크랩
- 구글
- 인앱결제
- 네트워크 관리사 2급 실기
- python
- Today
- Total
개발자일걸요..?
모음 사전 본문
링크 : https://programmers.co.kr/learn/courses/30/lessons/84512
코딩테스트 연습 - 5주차
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니
programmers.co.kr
(프로그래머스 > 코딩테스트 연습 > 위클리 챌린지> 5주차(모음사전) (level2))
<문제>
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다.
단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.
- word의 길이는 1 이상 5 이하입니다.
- word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다.
<내가 작성한 코드>
def solution(word):
answer = 0
dic = {'A':1, 'E':2, 'I':3, 'O':4, 'U':5}
words = [0,0,0,0,0]
for i in range(len(word)):
words[i] = dic[word[i]]
temp = 1
for i in range(len(words)-1,-1,-1):
if words[i]!=0:
answer += (temp*(words[i]-1)+1)
print(temp, answer)
temp = temp*5+1
return answer
주어진 단어를 자리별로 1~5의 숫자로 변환 -> 자릿수마다 변할때 커지는 수를 고려해서 숫자 구하기
ex) 11110 ~ 11115 => 5+1개
11100 ~ 11155 => (5+1)*5+1개
11000 ~ 11555 => ((5+1)*5+1)*5+1개
10000 ~ 15555 => (((5+1)*5+1)*5+1)*5+1개
00000 ~ 55555 => ((((5+1)*5+1)*5+1)*5+1)*5+1개
<다른 사람의 코드를 참고한 코드>
from itertools import product
def solution(word):
dic = []
for i in range(5):
for p in product("AEIOU", repeat = i+1):
dic.append("".join(p))
dic.sort()
return dic.index(word)+1
5글자로 된 사전이니 사전을 모두 생성한 뒤, 주어진 문자열의 index를 찾아내기
def solution(word):
answer = 0
for i,p in enumerate(word):
answer+= ("AEIOU".index(p)*781//5**i+1)
return answer
내가 작성했던 코드와 계산 방식은 유사. i번째 알파벳 p의 index를 통해 각 자리마다 도달하려면 뒤의 자리가 몇번 바뀌어야하는지 계산.
<참고한 개념>
product() : 데카르트곱(cartesian product)으로 중첩된 for루프와 동등하다
product('ABCD', repeat=2)
>>AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD
enumerate() : 자료형의 index 값을 포함하는 객체를 return
for i, v in enumerate("AEIOU")
print(i, ":", v)
>> 0 : A
1 : E
2 : I
3 : O
4 : U
'알고리즘코딩 > Programmers' 카테고리의 다른 글
[3차] 파일명 정렬 (0) | 2021.09.04 |
---|---|
순위 검색 (0) | 2021.09.04 |
삼각 달팽이 (0) | 2021.08.26 |
예상 대진표 (0) | 2021.08.24 |
수식 최대화 (0) | 2021.08.23 |