[Python] 코딩 도장 - Every Other Digit

Updated:

코딩 도장 사이트의 문제를 직접 풀어본 내용을 정리하여 올립니다.

코딩 도장에서 여러 문제를 확인할 수 있습니다.

난이도 순으로 차근차근 풀어보려 합니다.


[문제: Every Other Digit] - Lv.2

모든 짝수번째 숫자를 * 로 치환하시오. (홀수번째 숫자,또는 짝수번째 문자를 치환하면 안됩니다.)

로직을 이용하면 쉬운데 정규식으로는 어려울거 같아요.

Example: a1b2cde3~g45hi6 → a*b*cde*~g4*hi6

출처: https://codingdojang.com/scode/428?answer_mode=hide


[풀이]

txt = "a1b2cde3~g45hi6"
txt_lst = list(txt)

for i, v in enumerate(txt_lst):
    if ((i+1) % 2 == 0) & (v.isdigit() == True):
        txt_lst[i] = "*"

"".join(txt_lst)
'a*b*cde*~g4*hi6'

문자열을 리스트로 만든 후 짝수 조건과 숫자 조건에 따라 리스트 값을 바꿔 주었다.

짝수 조건은 index를 기준으로 설정하기 위해 (i+1) % 2, 숫자 조건은 isdigit()으로 확인하였다.

마지막으론 join()을 이용해서 출력한다.

txt = "a1b2cde3~g45hi6"
logic = txt.maketrans("0123456789", "*"*10)
txt.translate(logic)
'a*b*cde*~g**hi*'

처음엔 이전에 써보았던 maketrans()translate()를 써보려고 했는데 괜히 더 복잡할 것 같기도 하다.


[추천 풀이]

def cnvt(s):
    l = list(s)
    for k in range(1, len(l), 2):
        if l[k].isdigit():
            l[k] = '*'
    return ''.join(l)

cnvt("a1b2cde3~g45hi6")
'a*b*cde*~g4*hi6'

이 분은 짝수 조건은 range()에서 간격을 조정해 설정하였는데 훨씬 깔끔해 보인다.

Leave a comment