Create Phone Number, CodeWars Kata

사진: 코드워즈

Write a function that accepts an array of 10 integers (between 0 and 9), that returns a string of those numbers in the form of a phone number.

Example:

Kata.createPhoneNumber(new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}) // => returns "(123) 456-7890"

The returned format must be correct in order to complete this challenge. Don't forget the space after the closing parentheses!

 

요소가 10개인 int배열을 받아서 주어진 전화번호 형식으로 반환하는 문제입니다.

 

My Solution

숫자가 항상 10개가 주어지기 때문에 머리 아프게 생각할 것 없이 주어진 포맷에 맞게 출력만 해주면 되는 문제입니다. 저는 String.format()을 활용하고 입력된 배열을 문자열로 변환해 substring()을 활용했습니다.

솔루션 코드

테스트 코드

package com.codewars;

import java.util.Arrays;

public class CreatePhoneNumber {
    public static String createPhoneNumber(int[] numbers) {
        String str = String.join("", Arrays.stream(numbers).mapToObj(String::valueOf).toArray(String[]::new));
        return String.format("(%s) %s-%s", str.substring(0, 3), str.substring(3, 6), str.substring(6));
    }
}

 

Best Practice

BP1

이 BP를 보고 헛웃음이 나왔습니다. 그냥 문자열 그대로 넣으면 될 걸 왜 굳이 문자열로 변환하고 그걸 잘랐을까...

주어진 배열을 String.format()에 decimal 치환자를 이용해서 10개 모두 넣어주었네요.

package com.codewars;

import java.util.Arrays;

public class CreatePhoneNumber {
    public static String createPhoneNumber(int[] numbers) {
        return String.format("(%d%d%d) %d%d%d-%d%d%d%d", numbers[0], numbers[1], numbers[2], numbers[3], numbers[4],
                numbers[5], numbers[6], numbers[7], numbers[8], numbers[9]);
    }
}

 

BP2

BP1과 비슷하지만 배열을 하나하나 적어주는 것이 아니라 스트림을 이용해서 코드를 좀 더 간소화시켰습니다.

package com.codewars;

import java.util.Arrays;

public class CreatePhoneNumber {
    public static String createPhoneNumber(int[] numbers) {
        return String.format("(%d%d%d) %d%d%d-%d%d%d%d", java.util.stream.IntStream.of(numbers).boxed().toArray());
    }
}

 

728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기