문제
Note: 문제 이름은 임의로 작성한 것 입니다.
주어진 문자열에서 홀수인 숫자들의 제곱의 합을 출력한다.
예) “ab2v9bc13j5jf4jv21” -> 9^2 + 13^2 + 5^2 + 21^2 = 716
출처 - 로켓펀치 채용공고
풀이 및 답
개발팀 내에서 간단한 문제가 공유되어서 문제를 풀어보았다. regex를 사용하려 했지만 자체 constrains를 둬서 regex를 사용하지 않기로 했다. 내가 풀이한 방법은 아래와 같다.
sum = 0
digit = '0'
s = 'ab2v9bc13j5jf4jv21'
for ch in s:
if ch.isdigit():
digit += ch
else:
if int(digit) & 1:
sum += int(digit) * int(digit)
digit = '0'
sum += int(digit) * int(digit)
print(sum)
하지만 개발팀 내의 다른 분은 아주 간단하게 작성하셨다.
import re
REG = re.compile(r'\d+')
s = 'ab2v9bc13j5jf4jv21'
sum(int(match.group())*int(match.group()) for match in REG.finditer(s) if int(match.group())&1)
regex constraints 이후,
s = 'ab2v9bc13j5jf4jv21'
s_spaced = ''.join(c if c.isnumeric() else ' ' for c in s)
sum(int(d)*int(d) for d in s_spaced.split() if int(d)&1)
심지어 js 버전도 작성, 한줄짜리 코드를 완성해주셨다.
s.split('').map(c => isNaN(+c)? ' ': c).join('').split(' ').filter(c => +c > 0 && c&1).reduce((a,b) => (+a)+(+b)*(+b), 0)
오늘도 보람차게 자존감이 깎이는 하루인 것 같다.