문제 설명:
문자열이 주어진다. 문자열에는 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
'컴퓨터공학 > LeetCode 1000' 카테고리의 다른 글
[LeedCode] 53. Maximum Subarray 파이썬 Easy (0) | 2021.11.04 |
---|---|
[LeedCode] 175. Combine Two Tables SQL Easy (0) | 2021.11.03 |
[LeetCode] 3. Longest Substring Without Repeating Characters 파이썬 Medium (0) | 2021.11.02 |
[LeedCode] 1041. Robot Bounded In Circle 파이썬 Medium (0) | 2021.11.02 |
[leedCode] 7. Reverse Integer 파이썬 Medium (0) | 2021.11.02 |