Dash Insert

DashInsert 함수는 숫자로 구성된 문자열을 입력받은 뒤, 문자열 내에서 홀수가 연속되면 두 수 사이에 - 를 추가하고, 짝수가 연속되면 * 를 추가하는 기능을 갖고 있다. (예, 454 => 454, 4546793 => 454*67-9-3) DashInsert 함수를 완성하자. 출처

  • 입력 - 화면에서 숫자로 된 문자열을 입력받는다.
"4546793"
  • 출력 - *, -가 적절히 추가된 문자열을 화면에 출력한다.
"454*67-9-3"
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

12개의 풀이가 있습니다. 1 / 2 Page

#파이썬3.5.2
i = list(map(int,' '.join(input()).split()))
answer = [str(i[0])]
for x in range(len(i)-1):
    if i[x]%2==0 and i[x+1]%2==0:
        answer.append('*')
    if i[x]%2==1 and i[x+1]%2==1:
        answer.append('-')
    answer.append(str(i[x+1]))
print(''.join(answer))
입력:
4546793
출력:
454*67-9-3
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

python 2.7

def Dash_Insert(s):
    st=""
    for i in range(1,len(s)):
        st+=s[i-1]
        if((ord(s[i-1])-ord('0'))%2==0 and (ord(s[i])-ord('0'))%2==0):
            st+='*'
        elif((ord(s[i-1])-ord('0'))%2!=0 and (ord(s[i])-ord('0'))%2!=0):
            st+='-'
    st+=s[i]
    print st


Dash_Insert("1324924")

for문을 이용해 문자열을 탐색하여 홀수인 경우+ 짝수인 경우 *를 추가하도록 했습니다. 결과:1-32*492*4

1-32*492*4 아닌가요? - 디디, 2016/10/18 11:15 M D
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

re.sub 에 matchobj 을 인자로하는 함수사용이 가능하단걸 최근에 알았네요.

test = "4546793"

import re

def testfunc(mo):
    try:
        return '-'.join(mo.group(1))
    except:
        return '*'.join(mo.group(2))

result=re.sub('([13579]{2,})|([24680]{2,})',testfunc,test)

print(result)


※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

파이썬3.5

zip함수를 이용했습니다.

is_even = lambda a, b: int(a)%2==0 and int(b)%2==0
is_odd = lambda a, b: int(a)%2 != 0 and int(b)%2 != 0

def f(s):

    c = s[0]
    for a, b in zip(s, s[1:]):
        if is_even(a, b):
            c += '*' + b
        elif is_odd(a, b):
            c += '-' + b
        else:
            c += b

    return c

a = '4546793'
a_ = '454*67-9-3'
assert f(a) == a_
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

파이썬

def dashInsert(listInput):
    resultStr = ""
    for i in range(len(listInput)):
        if i > 0:
            if int(listInput[i-1]) % 2 == 0 and int(listInput[i]) % 2 == 0:
                resultStr += "*"
            elif int(listInput[i-1]) % 2 == 1 and int(listInput[i]) % 2 == 1:
                resultStr += "-"
        resultStr += listInput[i]
    return(resultStr)

inputStr = "4546793"
print(dashInsert(inputStr))

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def f(x):
    res = ''
    for i in range(len(x)-1):
        a, b = int(x[i])%2, int(x[i+1])%2
        res += x[i] + (('-' if a == 1 else '*') if a == b else '')
    return res + x[-1]

while __name__ == '__main__':
    print(f(input('>>>')))

파이썬 3.5.2 64

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
import re
print(re.sub(r'(([02468]{2,})|([13579]{2,}))', lambda x:'*'.join(x.group(2)) if x.group(2) else '-'.join(x.group(3)), input(":")))

Python 3.5.2에서 작성하였습니다.

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

파이썬

제 풀이는 왜 안될까요? ㅠㅠ

TypeError: not all arguments converted during string formatting 라고 나옵니다..

def Dash(num):
    num = list(num)

    num_int=[]
    for i in num:
        num_int.append(int(i))

    A = []
    A.append(num_int[0])

    n = 1
    while n <= len(num_int):
        if num_int[n]%2==0 and A[n-1]%2==0:

            A.append('*')
            A.append(num_int[n])

        elif num_int[n]%2==1 and A[n-1]%2==1:

            A.append('-')
            A.append(num_int[n])

        elif num_int[n]%2==1 and A[n-1]%2==0:

            A.append(num_int[n])

        elif num_int[n]%2==0 and A[n-1]%2==1:

            A.append(num_int[n])

        n += 1

    print(A)

Dash('34235')
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def dash_insert(num):
    for x in range(len(num)-1):
        if int(num[x]) % 2 == 0 and int(num[x+1]) % 2 == 0:
            num[x] += '*'
        elif int(num[x]) % 2 == 1 and int(num[x+1]) % 2 == 1:
            num[x] += '-'
    return ''.join(num)

print(dash_insert(list(input())))

#### 2016.12.14 D-435 ####
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
from functools import reduce 
def dashinsert(s): return reduce(lambda x,y: x+["*","","-"][int(x[-1])%2+int(y)%2]+y,s)

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

※ 풀이작성 안내
  • 본문에 코드를 삽입할 경우 에디터 우측 상단의 "코드삽입" 버튼을 이용 해 주세요.
  • 마크다운 문법으로 본문을 작성 해 주세요.
  • 풀이를 읽는 사람들을 위하여 풀이에 대한 설명도 부탁드려요. (아이디어나 사용한 알고리즘 또는 참고한 자료등)
  • 작성한 풀이는 다른 사람(빨간띠 이상)에 의해서 내용이 개선될 수 있습니다.
목록으로
코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.


언어별 풀이 현황
전 체 x 31
java x 10
python x 12
javascript x 2
ruby x 1
cpp x 2
기 타 x 3
php x 1