일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Python
- 코드수행
- STL
- 실전알고리즘
- C++
- 이것이 코딩테스트다 with 파이썬
- 딥러닝
- 파이썬
- AWS
- 3단계
- CS231n
- 그리디
- cs
- 백준
- 자료구조 및 실습
- 전산기초
- 2단계
- 구현
- 프로그래머스
- 1단계
- pytorch
- MySQL
- 머신러닝
- docker
- 모두를 위한 딥러닝 강좌 시즌1
- test-helper
- ubuntu
- Object detection
- ssd
- SWEA
- Today
- Total
곰퓨타의 SW 이야기
[프로그래머스 level2 5주차_모음사전] 수학적 사고를 활용하기 본문
해결해야하는 문제는 다음과 같았다.
https://programmers.co.kr/learn/courses/30/lessons/84512
코딩테스트 연습 - 5주차_모음사전
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니
programmers.co.kr
오랜만에 2단계 문제를 해결해보았다! 2단계인데 어렵게 느껴졌다 ㅎㅎ..
공식을 생각하는데 한참 걸렸다..!
아이디어는 다음과 같다.
(계속 생각날 떄까지 끄적이던 것)
(정리)
1. vowel 을 사전으로 AEIOU에 각각 1,2,3,4,5 를 key-value 값으로 저장하였다.
2. number은 각 자릿수마다 하나가 변경되는데 있는 사전 개수이다.
0 : 780은 A ~ E 를 알기 위한 것으로, A A ~ A U U U U 까지의 개수이다.
1 : 155는 A A ~ A E 를 알기 위한 것으로 A A A ~ A A U U U 까지의 개수이다.
2 : 30은 A A A ~ A A E 를 알기위한 것으로 A A A A ~ A A A U U 까지의 개수이다.
3 : 5는 A A A A ~ A A A E 를 알기 위한 것으로 A A A A A ~ A A A A U까지의 개수이다.
3. 현재 word가 A 인 경우는, 한 단계만 나아가고,
그렇지 않은 경우 , (현재 자리 모음의 바로 이전 모음)*(현재 자리) + (A~현재모음까지의 개수) 만큼 나아가도록 하였다.
--> 즉 한 자리 한자리 검사하되, 해당 자리에서 이전 모음까지의 경우의 수를 누적해나가는 방식을 활용하였다!
이는 그림으로 그리자면 다음과 같다.
아이디어를 바탕으로 작성한 코드는 다음과 같다.
def solution(word):
answer = 0
vowel = {'A':1,'E':2,'I':3,'O':4,'U':5}
number = {0:780, 1:155, 2:30, 3:5,4:0}
for i in range(len(word)) :
if word[i]=='A' :
answer += 1
else :
answer += (vowel[word[i]]-1)*number[i]+vowel[word[i]]
return answer
일일이 작성하여 만든 노가다식 코드를 작성하게 되었다..수학적 사고를 기르는 연습이 필요할 것 같다!
'TIL > 프로그래머스' 카테고리의 다른 글
[프로그래머스 level2 빛의 경로 사이클] dfs 활용하여 경로찾기 (0) | 2021.10.03 |
---|---|
[프로그래머스 level2 7주차_입실 퇴실] 규칙 찾기 (0) | 2021.09.30 |
[프로그래머스 level3 숫자게임] 그리디 응용하기 (0) | 2021.09.28 |
[프로그래머스 level3 최고의 집합] 수학 응용하기 (0) | 2021.09.27 |
[프로그래머스 level3 가장 긴 팰린드롬] 문자열 파싱하기 (0) | 2021.09.25 |