코딩테스트 연습에 공개된 문제는 (주)그렙이 저작권을 가지고 있습니다.
(지문 하단에 별도 저작권 표시 문제 제외)
코딩테스트 연습 문제의 지문, 테스트케이스, 풀이 등과 같은 정보는 비상업적, 비영리적 용도로 게시할 수 있습니다.
코딩테스트 정보
- 프로그래머스
- 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() 메서드가 실행속도를 저하시키는 것으로 보임