[#알고리듬] 숫자 문자열과 영단어

RookieAND·2022년 10월 7일
0

BaekJoon

목록 보기
32/42
post-thumbnail

❓ Question

https://school.programmers.co.kr/learn/courses/30/lessons/81301

본 문제는 3학년 2학기 알고리즘 소모임 알고리듬 활동으로 풀이한 문제입니다.

📖 Before Start

오랜만에 보는 문자열 알고리즘 문제, 비교적 쉽게 풀이할 수 있었다.

이번 문제는 문자열을 활용하여 규칙에 맞게 문자열 일부를 치환하는 문제였다.
과거에 비슷한 유형의 문제 (BOJ 2941 : 크로아티아 알파벳) 을 풀어서 그런가,
비교적 쉽게 풀이법을 캐치해서 코드를 빠르게 작성할 수 있었다.

✒️ Design Algorithm

내가 변경해야 할 문지열의 집합을 List로 추출한 후, 이를 변경해준다.

숫자와 영문이 혼합된 문자열 s 중에서, 영문으로 작성된 부분을 숫자로 고쳐야 한다.
예를 들어 one2three4 로 문자열이 설정되었다면, 이를 1234 로 변경해야 하는 것이다.

따라서 나는 0부터 9까지의 알파벳을 순서대로 List 에 넣고, 이를 하나씩 반복시켜
문자열 내부에 해당 단어가 있다면 replace 함수를 통해 이를 숫자로 치환시켰다.

💻 Making Own Code

✅ Correct Code

def solution(s):
    words = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
    result = s
    for word in words:
        if word in result:
            result = result.replace(word, str(words.index(word)))
    return int(result)

해당 영단어에서 변경될 숫자의 값을 인덱스로 잡으면 더욱 쉽다.

words 리스트는 0부터 9까지의 영문이 오름차순으로 담긴 List 이다.
이를 하나씩 반복시켜, s 가 해당 단어를 포함하고 있는 것이 확인되었다면
replace 함수를 통해 문자를 숫자로 전부 치환시키고, 결과값을 업데이트 한다.

📖 Conclusion

https://github.com/RookieAND/BaekJoonCode

비교적 유명한 유형의 문자열 문제인지라 쉽게 풀이가 가능했다.

profile
항상 왜 이걸 써야하는지가 궁금한 사람

0개의 댓글