여정의 기록
[HackerRank] Python 'The Minion Game' 본문
HackerRank의 The Minion Game은 String을 하나 입력받고
해당 String으로 만들 수 있는 철자 조합을 시작하는 철자가 모음인지 자음인지를 나누어
자음 시작 조합과 모음 시작 조합 어떤 것이 더 많은지 가려내는 문제였다.
여기서 고민된 것은 어떻게 해서 철자 조합을 만들어 낼 것이냐 였는데,
처음에는 사람들이 올려둔 답을 보고도 이해가 안됐다.
그러다가 종이에 적어보며 문득 이해가 됐는데,
1. string input 으로 BANANA 를 입력값으로 받는다.
s = input()
2. AEIOU 로 시작하는 vowel의 경우와 아닌 경우를 나눈다.
vowels = 'AEIOU'
if s[0] in vowels:
~~
else:
~~
3. vowel인지 아닌지를 나누기 전에 사실 먼저해야 할 일이 있다. BANANA 철자 하나씩 짚어야 한다.
vowels = 'AEIOU'
for i in range(len(s)):
if s[i] in vowels:
~~
else:
~~
이렇게 하면 BANANA의 첫번째 자리인 B가 자음인지 모음인지 , 그 다음 두번째 자리인 A가 자음인지 모음인지에 따라
어떤 행동을 하게 할 것인지 설정할 수 있다. 그러면 어떤 설정을 하는가?
문제를 보면 시작하는 철자에 따라 STUART 와 KEVIN 각각에게 점수를 주라고 되어있다.
vowels = 'AEIOU'
for i in range(len(s)):
if s[i] in vowels:
kevin에게 점수 추가
else:
stuart에게 점수 추가
4. 조건은 중복을 허용하는 것이었다. 그러므로 중복이 되는 것을 제거할 필요가 없다.
BANANA 에서 B로 시작하며 BANANA철자로 만들 수 있는 단어는 B, BA, BAN, BANA, BANAN, BANANA 총 6개 이다.
A로 시작하여 만들 수 있는 단어는 A, AN, ANA, ANAN, ANANA 총 5개 이다.
이 뜻은 BANANA 길이가 총 6개이고, B의 인덱스 값이 0 이므로 6 - 0 을 해도 같은 갯수의 값이 나온다.
(사실 여기서 잘못이해한 것이, substring 이란 시작 인덱스에서 끝까지, 그러니까 마구잡이 조합이 아닌 철자 차례를 유지하면서 경우의 수를 찾는 것이었다. 예를 들어 BANANA 에서 BNN 은 아니라는 것인데, BNN도 포함해야한다고 잘못 이해했었다... )
vowels = "AEIOU"
kevin = 0
stuart = 0
strlen = len(s)
for i in range(strlen):
if s[i] in vowels:
kevin += strlen - i
else:
stuart += strlen - i
그래서 이러한 코드가 완성되는 것이었다
'공부 > Algorithm' 카테고리의 다른 글
[MySql] SUBSTRING_INDEX 으로 VARCHAR를 .split() 해보자 (1) | 2023.01.17 |
---|---|
[MySql] WITH RECURSIVE 가상 테이블 이용하기 (0) | 2023.01.03 |
SQL , LIKE % AND UPPER (0) | 2022.12.28 |
간단한 모델링 과정, 주의점 (0) | 2022.02.14 |
추천시스템_연관규칙(rule)(지지도,신뢰도,향상도, 의미없는 연관규칙 최소화) (0) | 2021.09.16 |