여정의 기록

[HackerRank] Python 'The Minion Game' 본문

공부/Algorithm

[HackerRank] Python 'The Minion Game'

Chelsey 2023. 7. 11. 13:04
728x90

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

그래서 이러한 코드가 완성되는 것이었다 

728x90