Dash Insert

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

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

51개의 풀이가 있습니다. 1 / 6 Page

# python 3.6
def DashInsert(inp):
    """inp: number in string type"""
    rst = inp[0]
    vl = int(rst)
    for i in range(1, len(inp)):
        vr = int(inp[i])
        if vl % 2 == 0 and vr % 2 == 0:
            rst += "*"
        if vl % 2 == 1 and vr % 2 == 1:
            rst += "-"
        rst += str(vr)
        vl = vr
    return rst


print(DashInsert(input()))

2017/09/07 14:30

mohenjo

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

JAVA

public static void main(String[] args) {

        String str = "4546793";
        String result = "";

        for(int i = 0; i < str.length(); i++) {
            int mod = Integer.parseInt(String.valueOf(str.charAt(i))) % 2;

            if(i > 0) {
                int temp = Integer.parseInt(String.valueOf(str.charAt(i - 1))) % 2;

                if(mod == temp) {
                    if(mod == 1) {
                        result += "-";
                    }

                    if(mod == 0) {
                        result += "*";
                    }
                }
            }

            result += String.valueOf(str.charAt(i));

        }

        System.out.println(result);
    }
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def f(n):
    m = ''
    for i, chr1 in enumerate(n):
        if i:
            if int(chr1)%2 == 0 and int(n[i-1])%2 == 0:
                m += '*'
            elif int(chr1)%2 == 1 and int(n[i-1])%2 == 1:
                m += '-'
        m += chr1
    print(m)

f('4546793')
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def DashInsert(s):
    odd, even = '13579', '02468'
    dashed = s[0]
    for i in range(1, len(s)):
        if s[i-1] in odd and s[i] in odd: dashed += '-' + s[i]
        elif s[i-1] in even and s[i] in even: dashed += '*' + s[i]
        else: dashed += s[i]

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

public class DashInsert {
    public static String dashInsert(String str) {
        int before, now;
        StringBuffer result = new StringBuffer();
        result.append(str.charAt(0));
        before = Character.getNumericValue(str.charAt(0));
        for(int i=1; i<str.length(); i++)
        {
            now = Character.getNumericValue(str.charAt(i));
            if(now%2 == 0 && before%2 == 0)
                result.append("*" + str.charAt(i));
            else if(now%2 == 1 && before%2 == 1)
                result.append("-" + str.charAt(i));
            else
                result.append(str.charAt(i));
            before = now;
        }
        return result.toString();
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        System.out.println(dashInsert(str));
    }
}

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

for i in range(0,len(a)-1):
    if (int(a[i])%2==0 and int(a[i+1])%2==0) : #짝수연속
        b.append(a[i]+"*")


    elif (int(a[i])%2==1 and int(a[i+1])%2==1) : #홀수연속
        b.append(a[i]+"-")

    else :
        b.append(a[i])

print("".join(b)+a[len(a)-1])

454*67-9-3


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

파이썬3

한 줄에 끝내려고 하다 보니 약간 복잡해졌네요

a = input('INPUT!! : ')

print(''.join([ x if (int(x) + int(y)) % 2 != 0 else(x + '-' if int(x) % 2 !=0 else x + '*')  for x, y in zip(a, a[1:]) ]) + a[-1])

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

파이썬 3.5x입니다.

#120. Dash insert

def DI(n):
    result = ''
    for i in range(len(str(n))-1):
        if (int(str(n)[i])%2) == (int(str(n)[i+1])%2) and int(str(n)[i])%2 ==0: #짝수가 이어서 나오는 경우
            result = result + str(n)[i] + '*'
        elif (int(str(n)[i])%2) == (int(str(n)[i+1])%2) and int(str(n)[i])%2 ==1: #홀수가 이어서 나오는 경우
            result = result + str(n)[i] + '-'
        else:
            result = result + str(n)[i]
    result = result + str(n)[len(str(n))-1]

    return result

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

Python 3로 풀었습니다. 깔끔하게 잘 안되네요.

def dash_insert(s):
    def is_even(num):
        return num is not None and num != 0 and num % 2 == 0
    def is_odd(num):
        return num is not None and num != 0 and num % 2 != 0

    new = []
    for c in s:
        prev = int(new[-1]) if new else None
        curr = int(c)
        if is_even(curr) and is_even(prev):
            new.append('*')
        if is_odd(curr) and is_odd(prev):
            new.append('-')
        new.append(c)

    return ''.join(new)
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
var dashInsert = n => ("" + n).replace(/([13579]{2,})|([24680]{2,})/g, (_, o, e) => _.split("").join(o && "-" || e && "*"));

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

풀이 작성

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

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


언어별 풀이 현황
전 체 x 51
python x 22
java x 16
javascript x 4
cs x 1
php x 2
기 타 x 3
cpp x 2
ruby x 1