Codewars 문제풀기 (04/30)

Detect Pangram

  • String을 인자로받는다.
  • 입력 String이 Pangram인지 판별한다.
  • Pangram은 a-z까지 모두 1개 이상 쓴 문장을 뜻한다. (Case insensitive)
check("The quick brown fox jumps over the lazy dog.") 👉 true
check("You shall not pass!") 👉 false

1. Test와 리팩토링

  • 테스트 1 - 입력 String이 ““이라면 false를 리턴

    • 테스트 코드

      @Test
      public void testShouldFalseWhenNotContainAtoZ() {
        // Given: Set empty string
        String given = "";
          
        // Then: Should False
        assertFalse(PangramChecker.check(given));
      }
      
      • When없이 Then으로 처리해도 괜찮다고 생각해서 없앴다.
    • 실제 코드

        public class PangramChecker {
            
          public static boolean check(String sentence) {
            return false;
          }
        }
      

  • 테스트 2 - 입력 String이 a-z 모두 있으면 true를 리턴

    • 테스트 코드

      @Test
      public void testShouldTrueWhenNotContainAtoZ() {
        // Given: Set string contain a ~ z
        String given = "The quick brown fox jumps over the lazy dog.";
          
        // Then: Should True
        assertTrue(PangramChecker.check(given));
      }
      
    • 실제 코드

      public class PangramChecker {
        
        public static boolean check(String sentence) {
          sentence = sentence.toLowerCase();
          for (char index = 'a'; index <= 'z'; index++) {
            if (!sentence.contains(String.valueOf(index))) {
              return false;
            }
          }
          return true;
        }
      }
    
  • 이대로 제출했다(약 10분)

2. 답 비교, 느낀점

Best Practice 가장 많이 받은 코드

public class PangramChecker {
  public boolean check(String sentence){
        for (char c = 'a'; c<='z'; c++)
            if (!sentence.toLowerCase().contains("" + c))
                return false;
        return true;

  }
}
  • String.matches()를 통해 정규식으로 해결할 수 있을거라 생각했는데, 의외로 내가 한 방법이 best practice였다.

댓글남기기