728x90
반응형
FizzBuzz문제 구현하기
1에서 n까지의 숫자를 출력하되 3의 배수는 Fizz라는 문자열을 출력하고, 5의 배수는 Buzz라는 문자열을 출력하고 15의 배수는 FizzBuzz라는 문자열을 출력하는 알고리즘을 작성하라.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public static List<String> fizzBuzz(final int n){ List<String> result = new ArrayList<>(n); for(int i=0; i<=n; i++) { if(i % 15 == 0) { result.add("FizzBuzz"); }else if(i % 5 == 0) { result.add("Fizz"); }else if(i % 3 == 0) { result.add("Buzz"); }else { result.add(String.valueOf(n)); } } return result; } | cs |
위의 코드는 가장 쉽게 생각할 수 있는 코딩방식입니다.(저도 문제를 보자마자 이렇게 코딩하였습니다..)
하지만 이 코드에는 아쉬운점이 존재합니다. 코드의 재사용성과 논리적 추상화의 부분이 잘 스며들어있지 않다는 점입니다.
밑에 코드는 아쉬운점을 반영한 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public static List<String> secondFizzBuzz(final int n){ List<String> result = new ArrayList<>(n); for(int i=1; i<=n; i++) { final String word = toWord(i, 3, "Fizz") + toWord(i, 5, "Buzz"); if(isEmpty(word)) { result.add(String.valueOf(i)); }else { result.add(word); } } return result; } private static String toWord(final int value, final int divisor, final String word) { return value % divisor == 0 ? word : ""; } private static boolean isEmpty(String str) { return str == null | str == ""; } | cs |
이 코드의 장점 : 각각의 기능을 손쉽게 독립적으로 테스트할 수도 있고, 원하는 대로 다른 단어를 반환하게끔 수정할 있음
항상 코딩을 할 때 코드의 재사용성과 관련해서 생각하는 습관을 길러야겠습니다..^^;
728x90
반응형
'프로그래밍 노트 > 알고리즘' 카테고리의 다른 글
[JAVA] 팩토리얼(Factorial) 구하기 (0) | 2018.05.28 |
---|---|
[JAVA] 피보나치(fibonacci) 문제 (0) | 2018.05.28 |
[JAVA] 이진탐색(Binary Search) (0) | 2018.04.26 |
[JAVA] 병합정렬,합병정렬(Merge Sort) (0) | 2018.04.26 |
코딩테스트 #9 (0) | 2018.04.25 |