Dash Insert

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

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

44개의 풀이가 있습니다. 1 / 5 Page

파이썬 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));
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("숫자를 입력하세요 : ");
        String num = sc.nextLine();//문자열로 받음
        char[] numC = num.toCharArray();//캐릭터배열로 변환

        for(int i=1;i<numC.length;i++){
            System.out.print(numC[i-1]);
            if(numC[i-1]%2==0){
                if(numC[i]%2==0)
                    System.out.print("*");
            }else{
                if(numC[i]%2!=0)
                    System.out.print("-");
            }
        }//조건식 작성 홀수의 문자형의 아스키코드도 어차피 홀수이다. 굳이 인트형으로 변환할 필요없다.

        System.out.println(numC[numC.length-1]);

        sc.close();
    }
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
let index = '';
let indexFunc = (str) => {
    index += str.charAt(0);
    for(let i = 1; i < str.length; i++){
        if(str.charAt(i)%2 == 0 && str.charAt(i-1)%2 == 0){
            index += '*';
        }else if(str.charAt(i)%2 == 1 && str.charAt(i-1)%2 == 1){
            index += '-';
        }
        index += str.charAt(i);
    }
    return index;
}

console.log(indexFunc('565446488'));

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
example = '4546793'
examplelist = [int(example[i]) for i in range(len(example))]
def distinguish(objectlist,count):
    if ( objectlist[count] + objectlist[count+1] ) % 2 != 1:
        if objectlist[count] % 2 == 1:
            return 1
        else:
            return 2
    return 0
ilist = list()
for i in range(len(examplelist)-1):
    if distinguish(examplelist,i) == 1:
        ilist.append([i+1,'-'])
    elif distinguish(examplelist,i) == 2:
        ilist.append([i+1,'*'])
print(ilist)
for i,x in enumerate(ilist):
    examplelist.insert(ilist[i][0] + i, ilist[i][1])
print(examplelist)

흠; 너무긴가요;;

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

namespace dashinsert
{
    class nana
    {
        static void Main (string[] args)
        {
            int num = 0;
            Console.WriteLine("{0}, {1}", Math.Pow(2, 3), Math.Pow(3, 2));
            while (true)
            {
                Console.WriteLine("숫자들을 입력하십시오.");
                string temp = Console.ReadLine();
                try { num = Convert.ToInt32(temp); }
                catch (Exception e) { Console.WriteLine("다시 입력하세요. 숫자만 들어가야 합니다.");}
                if (num != 0)
                    break;
            }
            int memory = 0;
            int i = 0;
            while (true)
            {
                if ((int)(num / Math.Pow(10, i)) % 10 != 0)
                {
                    memory = i;
                    i++;
                }
                else
                    break;
            }
            memory++;
            string result = "";
            for (int j = memory - 1; j >= 0; j--)
            {
                result += Convert.ToString((int)(num / Math.Pow(10, j)) % 10);
                if (j != 0)
                {
                    if (((int)(num / Math.Pow(10, j)) % 10) % 2 == 0 && (((int)(num / Math.Pow(10, j - 1)) % 10)) % 2 == 0)
                        result += "*";
                    if (((int)(num / Math.Pow(10, j)) % 10) % 2 == 1 && (((int)(num / Math.Pow(10, j - 1)) % 10)) % 2 == 1)
                        result += "-";
                }
            }
            Console.WriteLine(result);
        }
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

python 3.4.2 입력스트링을 zip()을 사용하여 tuple 로 묶어서 계산했습니다.

in_str = input("Enter numbers: ") # 입력이 4546793 이면 in_str = '4546793'

result = in_str[0]
for a,b in zip(in_str[0:], in_str[1:]): # zip()으로 묶인 튜플은 ('4','5'),('5','4'),('4','6'),('6','7'),('7','9'),('9','3')
    if int(a)%2 == 0 and int(b)%2 == 0:
        result += '*' + b
    elif int(a)%2 == 1 and int(b)%2 == 1:
        result += '-' + b
    else:
        result += b

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

public class DashInsertMain {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String num = scanner.nextLine();
        StringBuffer stringBuffer = new StringBuffer(num);
        //숫자를 String으로 입력받음

        boolean prevOdd = false;
        boolean currentOdd = false;
        int addCount=0;
        //addCount : 중간에 String 길이가 늘어나는 것 대처하기 위한 변수

        prevOdd = (num.charAt(0)%2 != 0) ? true : false;
        //for문 들어가기 전 첫번째 숫자가 홀수인지 먼저 확인

        for(int i=1, size=num.length(); i<size; i++){
            //첫번째는 이미 확인했으므로 i=0이 아닌 i=1부터.

            currentOdd = (num.charAt(i)%2 != 0) ? true : false;
            //for문 시작시 currentOdd 정보 입력

            if(prevOdd == currentOdd && prevOdd){
                //둘 다 홀수일 경우
                stringBuffer.insert(i+addCount++, "-");
            }else if(prevOdd == currentOdd){
                //둘 다 짝수일 경우
                stringBuffer.insert(i+addCount++, "*");
            }

            prevOdd = currentOdd;
            //for문 넘기기 전에 prev 정보 입력
        }

        System.out.println("Output: "+stringBuffer.toString());

    }
}

자바로 짜봤어요!

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

PHP

$val = "4546793";
for($i=strlen($val)-1; $i>0; $i--) {
    $a = $val[$i]%2;
    $b = $val[$i-1]%2;
    if($in = ($a && $b)?'-':((!$a && !$b)?'*':false)) {
        $val = substr_replace($val, $in, $i, 0);
    }
}
echo $val;
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

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

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


언어별 풀이 현황
전 체 x 44
python x 17
javascript x 4
java x 14
cs x 1
php x 2
기 타 x 3
cpp x 2
ruby x 1