def solution(babbling):
answer = 0
for word in babbling:
for pronunciation in ['aya', 'ye', 'woo', 'ma']:
word = word.replace(pronunciation, '')
if not word.strip():
answer += 1
return answer
a=' '
print(not a.strip()) #True
b=' ha'
print(not b.strip()) #False
문제 설명
머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ babbling의 길이 ≤ 100
- 1 ≤ babbling[i]의 길이 ≤ 15
- babbling의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.
- 즉, 각 문자열의 가능한 모든 부분 문자열 중에서 "aya", "ye", "woo", "ma"가 한 번씩만 등장합니다.
- 문자열은 알파벳 소문자로만 이루어져 있습니다.
입출력 예babblingresult
["aya", "yee", "u", "maa", "wyeoo"] | 1 |
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"] | 3 |
입출력 예 설명
입출력 예 #1
- ["aya", "yee", "u", "maa", "wyeoo"]에서 발음할 수 있는 것은 "aya"뿐입니다. 따라서 1을 return합니다.
입출력 예 #2
- ["ayaye", "uuuma", "ye", "yemawoo", "ayaa"]에서 발음할 수 있는 것은 "aya" + "ye" = "ayaye", "ye", "ye" + "ma" + "woo" = "yemawoo"로 3개입니다. 따라서 3을 return합니다.
유의사항
- 네 가지를 붙여 만들 수 있는 발음 이외에는 어떤 발음도 할 수 없는 것으로 규정합니다. 예를 들어 "woowo"는 "woo"는 발음할 수 있지만 "wo"를 발음할 수 없기 때문에 할 수 없는 발음입니다.
내 풀이:
def solution(babbling):
answer = 0
for word in babbling:
for pronunciation in ['aya', 'ye', 'woo', 'ma']:
word = word.replace(pronunciation, ' ')
if not word.strip():
answer += 1
return answer
1. `def solution(babbling):`: 함수 `solution`을 정의합니다. 이 함수는 `babbling`이라는 문자열 리스트를 인자로 받습니다.
2. `answer = 0`: 결과를 저장할 변수 `answer`를 0으로 초기화합니다.
3. `for word in babbling:`: `babbling` 리스트에 있는 각각의 단어에 대해 반복합니다.
4. `for pronunciation in ['aya', 'ye', 'woo', 'ma']:`: 각 단어에서 'aya', 'ye', 'woo', 'ma' 발음을 하나씩 확인합니다.
5. `word = word.replace(pronunciation, ' ')`: 단어에서 현재 발음 `pronunciation`을 공백으로 대체합니다.
6. `if not word.strip():`: 만약 단어가 모두 공백으로만 이루어져 있다면(즉, 이어붙인 발음이라면),
7. `answer += 1`: `answer` 값을 1 증가시킵니다.
8. `return answer`: 최종적으로 `answer` 값을 반환합니다. 이 값은 이어붙인 발음으로 이루어진 단어의 개수를 나타냅니다.
이 코드는 각 단어에서 주어진 발음들을 공백으로 대체한 후, 그 결과가 모두 공백인지를 확인하여 이어붙인 발음으로 이루어진 단어의 개수를 세는 것입니다.
strip 메소드: strip() 메서드는 문자열의 양쪽에 있는 공백만 제거하므로, 중간에 있는 공백은 그대로이다.
`word.strip()`는 문자열 `word`의 양쪽 공백을 제거한 결과를 반환합니다. 그리고 `not word.strip()`는 만약 `word`가 모두 공백으로만 이루어져 있다면 (즉, 이어붙인 발음이라면) True가 됩니다.
예를 들어, 단어 'ayahaye가 낀 경우에는 단어들을 공백으로 대체하고 난 뒤에는 " ha "와 같은 형태가 됩니다. 이때 `strip()` 함수를 사용하면 양쪽의 공백이 제거되어 "ha"가 됩니다. 그런데 여기서 `not word.strip()`는 False가 됩니다. 왜냐하면 공백이 아니기 때문입니다.
하지만 이어붙인 발음으로 이루어진 단어를 생각해보면, 그 안에는 어떤 문자도 없는 빈 문자열이 됩니다. 따라서 이때 `strip()` 함수를 사용하면 빈 문자열이 됩니다. 그리고 `not word.strip()`는 True가 됩니다.
즉, `if not word.strip():`는 단어가 모두 공백으로만 이루어져 있다면 (즉, 이어붙인 발음이라면)를 확인하는 조건문입니다.
참고:
def solution(babbling):
answer = 0
for word in babbling:
for pronunciation in ['aya', 'ye', 'woo', 'ma']:
word = word.replace(pronunciation, '') # ' '를 ''로 변경
if not word.strip():
answer += 1
return answer
공백을 없애면 어떻게 될까?
테스트 1 | |
입력값 〉 | ["aya", "yee", "u", "maa", "wyeoo"] |
기댓값 〉 | 1 |
실행 결과 〉 | 실행한 결괏값 2이 기댓값 1과 다릅니다. |
테스트 2 | |
입력값 〉 | ["ayaye", "uuuma", "ye", "yemawoo", "ayaa"] |
기댓값 〉 | 3 |
실행 결과 〉 | 테스트를 통과하였습니다. |
다음과 같은 결과가 나온다.
이는 이전 풀이에서 [" "," e", "u", " a", "w oo"]였던 부분이 ["","e", "u", "a", ""]로 바뀌면서 결과값이 2개가 나온다.
차이가 되는 부분은 다음과 같다.
babbling1 = ["wyeoo"]
answer = 0
for word in babbling1:
for pronunciation in ['aya', 'ye', 'woo', 'ma']:
word = word.replace(pronunciation, '')
print(word)
if not word.strip():
answer += 1
print(answer)
"wyeoo"가 "woo"가 되고 ""가 된다.
이 코드는 발음을 빈 문자열로 대체하여 문자열에서 발음이 모두 사라지면 이어붙인 발음이라고 판단한다. 모든 발음을 제거한 뒤에 문자열이 공백으로 남지 않아서, w oo를 woo로 체크하는 오류가 발생한다.
다른 사람 풀이(1)
def solution(babbling):
answer = 0
for i in babbling:
for j in ['aya','ye','woo','ma']:
if j*2 not in i:
i=i.replace(j,' ')
if not i.rstrip():
answer +=1
return answer
- for i in babbling:: 입력으로 받은 문자열 리스트 babbling의 각각의 단어를 반복합니다.
- for j in ['aya','ye','woo','ma']:: 이어붙인 발음이 되기 위해서는 "aya", "ye", "woo", "ma"의 발음이 각각 한 번씩만 나타나야 합니다. 연속해서 두 번 등장하지 않는지를 확인하기 위해 각각의 발음에 대해서 반복합니다.
- if j*2 not in i:: 이어붙인 발음인지 확인하기 위해 해당 발음을 두 번 이상 연속해서 포함하는지 확인합니다. 만약 해당 발음이 두 번 이상 연속해서 포함되어 있지 않다면, 해당 발음을 공백으로 대체합니다.
- if not i.rstrip():: 문자열에서 오른쪽에 있는 공백을 제거한 후에 문자열이 빈 문자열이 되었는지 확인합니다. 만약 빈 문자열이라면, 해당 단어는 이어붙인 발음으로 이루어져 있는 것으로 간주하고, answer 값을 1 증가시킵니다.
- 마지막으로, 함수는 answer 값을 반환하여 이어붙인 발음으로 이루어진 단어의 개수를 반환합니다.
'coding test' 카테고리의 다른 글
3월에 태어난 여성 회원 목록 출력하기 (0) | 2024.04.05 |
---|
댓글