IT Contents/프로그래밍 팁

Find the missing letter, CodeWars Kata 자바 솔루션

비빔뉴스 2021. 4. 3. 07:00

 

Find the missing letter, CodeWars Kata

사진: 코드워즈

#Find the missing letter

Write a method that takes an array of consecutive (increasing) letters as input and that returns the missing letter in the array.

You will always get an valid array. And it will be always exactly one letter be missing. The length of the array will always be at least 2. The array will always contain letters in only one case.

Example:

['a','b','c','d','f'] -> 'e' ['O','Q','R','S'] -> 'P'

["a","b","c","d","f"] -> "e"
["O","Q","R","S"] -> "P"

(Use the English alphabet with 26 letters!)

Have fun coding it and please don't forget to vote and rank this kata! :-)

I have also created other katas. Take a look if you enjoyed this kata!

알파벳이 순서대로 들어있는 char배열을 받아서 빠진 알파벳을 찾는 문제입니다. ["a","b","c","d","f"]에는 중간에 "e"가 빠졌기 때문에 e를 리턴해주면 됩니다. 대문자나 소문자가 입력될 수 있습니다.

 

My Solution

저는 우선 입력값의 대소문자를 구분하기 위해서 배열의 0번째 요소를 꺼내서 판별했습니다. 반복문의 종료 조건을 주기 위해서 대문자 'Z'로 끝나야 하는지 소문자 'z'로 끝나야 하는지 알아야 한다고 생각했어요.

그런 다음 배열의 0번째 요소에서 시작하는 반복문을 통해 char값을 1씩 증가시켜서 다음 영문자가 있는지 확인을 했습니다.

솔루션 코드

테스트 코드

package com.codewars;

import java.util.Arrays;

public class FindMissingLetter {
    public static char findMissingLetter(char[] array) {
        char end = array[0] < 'z' ? 'z' : 'Z';
        for (char letter = array[0]; letter < end; letter++) {
            if (Arrays.binarySearch(array, letter) < 0) {
                return letter;
            }
        }
        return ' ';
    }
}

 

Best Practice

BP는 대소문자 확인을 하지 않았습니다. 어차피 입력값은 valid 한 형태만 들어오기 때문이겠죠. 그리고 입력 배열이 이미 정렬되어 있는 것을 이용해서 배열 전체를 서치하지 않고 바로 forEach를 통해 증가된 값과 비교했습니다.

	public static char bp(char[] array) {
        char expectableLetter = array[0];
        for (char letter : array) {
            if (letter != expectableLetter)
                break;
            expectableLetter++;
        }
        return expectableLetter;
    }

 

728x90