5/19 TIL

나명흠·2023년 5월 19일
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"가
한 번씩만 등장합니다.
문자열은 알파벳 소문자로만 이루어져 있습니다.

**유의사항**
네 가지를 붙여 만들 수 있는 발음 이외에는 어떤 발음도 할 수 없는 것으로 규정합니다.
예를 들어 "woowo"는 "woo"는 발음할 수 있지만 "wo"를 발음할 수 없기 때문에
할 수 없는 발음입니다.

풀이방식

  1. 가능한 발음을 리스트에 담기
  2. 가능횟수 변수 만들기
  3. 문자열의 각 문자에서 가능발음을 빼기 >>> 문자열은 뺄셈이 안되서 특정 글자로 바꾸기
  4. 문자가 발음가능 문자로만 이루어져 있는지 판별
  5. 가능할 때마다 가능횟수 증가

풀이코드

def solution(babbling):
    p = ["aya", "ye", "woo", "ma"]
    count = 0
    for i in babbling: # 주어진 문자열에서 문자를 하나씩 뽑고
        for a in p: # 가능 발음들을 하나씩 뽑아서
            if a in i: # 주어진 문자에 가능 발음이 있으면
                i = i.replace(a," ") # 주어진 문자열에서 가능발음을 공백으로 바꾼다
            if len(i) - i.count(" ") == 0: # 공백처리하고 난 뒤 문자열의 길이가 공백처리한 갯수와 같으면 (문자열이 가능발음으로만 이루어져 있으면)
                count +=1
                break # 이게 필수! (생각해보자)
    return count

풀이후기

3번 풀이에서 문자열을 빼려고 시도해 봤는데 원래 안되는 거라고 해서 아쉬웠다..
특정 글자로 바꾸어 푸는 방식은 예전에 최빈값 구하기에서 했던거 같은데
이번에 스스로 떠올리지 못해서 아쉬웠다.
처음엔 4번에서 공백처리 되어도 길이는 다 다르다는 걸 잊고서, 길이를 0 보다 크면 이라고 if문을 작성했었다.
break는 없어도 된다고 생각했지만 반드시 있어야 했다.
0레벨 문제인데 너무 어려웠다... ㅠ

vscode에서 알고리즘 문제풀이 꿀팁


저기 빨간 버튼을 눌러서 만들어주고 F5를 누르면

이렇게 상단에 디버그를 할 수 있는 창이 뜬다. 맨 위를 눌러주면

이렇게 왼쪽에 창이 뜨고 실행 및 디버그를 눌러주면

이렇게 되는데 이때부터 F11을 누르면 코드가 한 줄씩 실행되면서 원하는 값이 나오는지 확인할 수 있다! 이게 바로 디버깅!

F5 : 디버그 시작/정지
Shift + F5 : 디버그 종료
Ctrl + F5 : 시작(디버그 실행 x)
F9 : breakpoint on/off
F10 : 디버그 현재 라인 실행(한줄씩 실행), 함수를 만나면 함수 안으로 들어가지 않음
F11 : 디버그 함수의 경우 함수 내부로 들어가서 실행
Shift + F11 : 디버그 하고 있는 현재 함수 빠져나오기
F11로 한 줄 씩 진행하면 에러나 원하는 값을 잘 출력 하는지 찾기 편함!

유의 할 점은 코드를 한 줄씩 실행할 때 바로 직전 단계로 돌아가지 못 한다는 것과 캡쳐본처럼(캡쳐본은 실행안됌. bubbling이 없음..) 값이 없거나 제대로 입력하지 않으면 안되니 알고리즘 풀 때 주의!

profile
가보자고

0개의 댓글