Find the missing letter, CodeWars Kata 자바 솔루션
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;
}