코딩테스트 옹알이 풀이 (프로그래머스)
코딩테스트 연습에 공개된 문제는 (주)그렙이 저작권을 가지고 있습니다.
(지문 하단에 별도 저작권 표시 문제 제외)
코딩테스트 연습 문제의 지문, 테스트케이스, 풀이 등과 같은 정보는 비상업적, 비영리적 용도로 게시할 수 있습니다.
코딩테스트 정보
- 프로그래머스
- python
- level 0
- 점수 : 캡쳐 못함
- https://school.programmers.co.kr/learn/courses/30/lessons/120956
문제
머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 “aya”, “ye”, “woo”, “ma” 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤
babbling의 길이 ≤ 100 - 1 ≤
babbling[i]의 길이 ≤ 15 babbling의 각 문자열에서 “aya”, “ye”, “woo”, “ma”는 각각 최대 한 번씩만 등장합니다.- 즉, 각 문자열의 가능한 모든 부분 문자열 중에서 “aya”, “ye”, “woo”, “ma”가 한 번씩만 등장합니다.
- 문자열은 알파벳 소문자로만 이루어져 있습니다.
입출력 예
| babbling | result |
|---|---|
| [“aya”, “yee”, “u”, “maa”, “wyeoo”] | 1 |
| [“ayaye”, “uuuma”, “ye”, “yemawoo”, “ayaa”] | 3 |
풀이 코드
풀이 코드 1 (2023-01-16)
time : 0.02ms ~ 0.23ms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def solution(babbling):
answer = []
bab = ["aya", "ye", "woo", "ma"]
for i in bab:
babbling = [ x.replace(i, '1') for x in babbling]
for i in babbling:
try:
answer.append(int(i))
except:
pass
return len(answer)
풀이 코드 2 (2023-01-18)
time : 0.01ms ~ 0.08ms
1
2
3
4
5
6
7
8
9
10
def solution(babbling):
bab = ["aya", "ye", "woo", "ma"]
for i in bab:
babbling = [ x.replace(i, ' ') for x in babbling]
babbling = [ x.strip() for x in babbling ]
return babbling.count('')
풀이 방식
■■■■ 문제 요약 ■■■■
주어진 strings 중 “aya”, “ye”, “woo”, “ma” (이하:bab) 를 한 번씩만 사용하여 만들 수 있는 string의 갯수를 구하라.
■■■■ 하드 풀이 ■■■■
babbling = [“aya”, “yee”, “u”, “maa”, “wyeoo”]
(1) aya : 그냥 가능
(2) yee : ye는 가능하나, 남은 e는 불가
(3) u : 불가
(4) maa : ma는 가능하나, 남은 a는 불가
(5) wyeoo : 중간의 ye는 가능하나, 따로 떨어진 woo는 불가
■■■■ 접근 방식 ■■■■
(1) string에서 bab의 원소로 대체할 수 있는 부분을 찾는다.
(2) 대체할 수 있는 부분은 다른 char 혹은 int, 공백 등으로 replace 한다.
(3) string들 중 2번에서 지정한 char, int, 공백인 원소의 개수를 count 한다.
■■■■ 핵심 계산식 서술 ■■■■ (1번 풀이 기준)
(1) string에서 bab의 원소로 대체할 수 있는 부분 찾아 ‘1’로 replace
1 2 for i in bab: babbling = [ x.replace(i, 1) for x in babbling]
(2) replace된 babbling에서 int화 할 수 있는 원소만 찾아 answer 리스트에 담기
1 2 3 4 5 for i in babbling: try: answer.append(int(i)) except: pass
(3) answer 리스트의 원소 개수를 답으로 반환
1 return len(answer)
■■■■ 핵심 계산식 서술 ■■■■ (2번 풀이 기준)
(1) string에서 bab의 원소로 대체할 수 있는 부분 찾아 공백으로 replace
1 2 for i in bab: babbling = [ x.replace(i, ' ') for x in babbling]
(2) babbling에서 양쪽에 있는 공백 제거 (두 번 이상 replace 되는 상황 대비)
1 babbling = [ x.strip() for x in babbling ]
(3) babbling 원소 중 공백인 것의 개수를 답으로 반환
1 return babbling.count('')
리뷰
- 풀이 간 실행속도 차이 : try-exception, int() 메서드가 실행속도를 저하시키는 것으로 보임
댓글 남기기