컴퓨터공학/LeetCode 1000

[LeedCode] 423. Reconstruct Original Digits from English 파이썬 Medium

saurus2 2021. 11. 3. 04:42

문제 설명:

문자열이 주어진다. 문자열에는 0 부터 9까지 나타내는 단어들이 들어있다.
그 단어들은 섞여 있어서 숫자를 알아볼 수 없다.
이 숫자들을 알아내여, 오름차순 순으로 출력해야한다.

문제 풀이:

숫자들은 개수에 제한없이 문자열에 저장되있다.
특정 알파벳의 개수를 이용하여 숫자들을 재구성해야한다.

1. 0 부터 9까지의 숫자의 영어단어들을 봤을때, 하나의 숫자에만 들어가는 알파벳이있다.
2. z, w, u, x, g 다섯개가 오직 하나의 단어에만 들어가는 알파벳이다. zero, two, four, six, eight.
3. 문자 스트링에서 위 다섯개의 알파벳 개수를 센다. ( 0, 2, 4, 6, 8 ) 의 개수를 의미하게 된다.
4. 그리고 five는 f개수를 세서 four의 개수를 빼면 도출할 수 있다.
5. 마찬가지로 seven : v 개수 - f(five),
three : r 개수 - z(zero) - u(four),
one : o 개수 - z(zero) - w(two) - u(four) 
nine : n 개수 - v(seven) - o(one) 을 빼서 2로 나눠야한다. (n 이 nine에는 두개가 존재)
6. 그리고 각각 개수에 알파벳을 곱해서 리턴한다.

423. Reconstruct Original Digits from English

Given a string s containing an out-of-order English representation of digits 0-9, return the digits in ascending order.

 

Example 1:

Input: s = "owoztneoer" Output: "012"

Example 2:

Input: s = "fviefuro" Output: "45"

 

Constraints:

  • 1 <= s.length <= 105
  • s[i] is one of the characters ["e","g","f","i","h","o","n","s","r","u","t","w","v","x","z"].
  • s is guaranteed to be valid.

소스코드:

class Solution:
    def originalDigits(self, s: str) -> str:
        uniq = ['z', 'w', 'u', 'x', 'g']
        num = []
        z = s.count('z')                # zero
        w = s.count('w')                # two
        u = s.count('u')                # four
        f = s.count('f') - u            # five
        x = s.count('x')                # six
        v = s.count('v') - f            # seven
        g = s.count('g')                # eight
        r = s.count('r') - z - u        # three
        o = s.count('o') - z - w - u    # one
        n = int((s.count('n') - v - o) // 2)
        return '0' * z + '1' * o + '2' * w + '3' * r + '4' * u + '5' * f \
            + '6' * x + '7' * v + '8' * g + '9' * n