[ 알고리즘 ] LeetCode 1678. Goal Parser Interpretation

이주 weekwith.me·2022년 8월 14일
0

알고리즘

목록 보기
64/73
post-thumbnail

블로그를 이전 중이라 완료되기 전까지는 벨로그에 작성할 계획입니다.
이후 모든 글은 https://weekwith.me 에 작성 예정이니 다른 글이 궁금하시다면 해당 링크를 통해 방문해주세요.

본 글은 [ LeetCode ] 1678. Goal Parser Interpretation를 풀고 작성한 글입니다.

문제

요구사항

You own a Goal Parser that can interpret a string command . The command consists of an alphabet of "G" , "()" and/or "(al)" in some order. The Goal Parser will interpret "G" as the string "G" , "()" as the string "o" , and "(al)" as the string "al" . The interpreted strings are then concatenated in the original order.

Given the string command , return the Goal Parser's interpretation of command .

제약사항

  • 1 <= command.length <= 100
  • command consists of "G" , "()" , and/or "(al)" in some order.

풀이

접근법

정규표현식을 사용해서 문제를 풀 수 있다.

이때 [] 를 사용할 경우 내부에 있는 문자들 중에 하나여야 한다는 의미이기 때문에 주의해야 한다.

따라서 () 를 사용해서 그룹으로 만들어주거나 아니면 개별적으로 단어를 입력하면 된다.

이때 몇몇 특수문자의 경우 위에 사용된 것처럼 아예 다른 의미를 가지기 때문에 이스케이프 문자( \ )를 사용해서 해당 문자가 어떤 문법적 의미로서 사용된 것이 아닌 문자 자체로 사용된 것임을 선언해줘야 한다.

나의 풀이

접근법을 토대로 문제를 해결하면 아래와 같다.

def solution(s: str) -> str:
    import re
    
    
    return re.sub(r"\(\)", "o", re.sub("\(al\)", "al", command))

다른 풀이

아래와 같이 해시 테이블 -파이썬에서의 딕셔너리- 을 사용해서 문제를 해결할 수도 있다.

def solution(command: str) -> str:
    answer: str = ""
    converted_table: dict[str, str] = { "()": "o", "(al)": "al" }
    
    for character in command:
        if character == "G":
            answer += character
            
        elif character == "(":
            consecutive_word: str = "("
        
        elif character == ")":
            consecutive_word += character
            answer += converted_table[consecutive_word]
            consecutive_word = ""
        
        else:
            consecutive_word += character
    
    return answer

좀 더 견고한 풀이는 아래와 같다.

단어가 더 추가되면 해시 테이블에 키와 값만 추가해주면 되기 때문이다.

def solution(command: str) -> str:
    answer: str = ""
    consecutive_word: str = ""
    converted_table: dict[str, str] = {"()": "o", "(al)": "al", "G": "G"}
    
    for character in command:
        consecutive_word += character
        if consecutive_word in converted_table:
            answer += converted_table[consecutive_word]
            consecutive_word = ""

    return answer

시간 복잡도

길이가 N인 문자열에 대해 반복문을 그 길이만큼 수행하면 되기 때문에 시간 복잡도는 O(N)이다.

profile
Be Happy 😆

0개의 댓글