알고리즘 연습

[ 알고리즘 연습 ] 14761. FizzBuzz _ JAVA

코딩하는 너구리 2019. 12. 7. 17:09
반응형

문제

 

 

 

 

풀이

 

 

이 풀이법은 「 JAVA 프로그래밍 면접 이렇게 준비한다 」 책을 통해 알게 되었습니다.

 

 

참고 자료 

https://book.naver.com/bookdb/book_detail.nhn?bid=8655189

 

JAVA 프로그래밍 면접 이렇게 준비한다

자바 프로그래머의 성공적인 입사/이직을 돕기 위한 면접과 코딩 인터뷰 지침서. 1부는 면접 일반론과 자바 프로그래밍뿐만 아니라 프로그래머에게 꼭 필요한 기본 알고리즘이나 자료구조를 다룬다. 2부는 자바 언어의 기본과 테스트 코드 작성법, 가상머신의 이해 등 자바 핵심을 다룬다.3부는 자바 개발 환경과 관련된 컴포넌트와 프레임워크를 다룬다. 제티, 플레이 프레임워크, REST, 스프링, 하이버네이트, 안드로이드 등 현재 자바 개발 환경에서 많이 사용하는 주

book.naver.com

 

 

 

간단히 생각해 보면 1부터 N 까지의 수 중에서,

X로 나누어 떨어질 경우 "Fizz" 를 출력하고 Y로 나누어 떨어질 경우 "Buzz"를 출력하고

X와 Y로 모두 나누어 떨어질 경우에는 "FizzBuzz"를 출력해주면 되는 문제입니다.

 

먼저 저는 if else 분기문을 이용하여 정답을 구하였습니다.

 

 

 

 

 

하지만 지금의 코드는

코드의 재사용성과, 논리적 추상화가 잘 되어 있지 않은 상태입니다.

 

따라서 면접에서 이러한 문제를 받았을 경우 Fizz, Buzz, FizzBuzz 각각을 추상화해서 제공할 수 있어야 합니다.

그래야 손쉽게 독립적 테스트를 할 수 있고, 원하는 대로 다른 단어를 반환하게끔 수정하기 쉽기 때문입니다.

 

저도 위와 같은 풀이를 했기 때문에 나중을 대비해 연습할 겸 포스팅하게 되었습니다.

 

 

그렇다면 코드의 재사용성과 논리적 추상화가 반영된 코드는 어떤 모습일까?

 

 

 

 

fizzbuzz 메서드는 일치하는 값을 반환하지 않을 때 (returnString.isEmpty()) 해당 숫자를 출력해주었습니다.

책에서 처럼 List를 활용하지는 않았지만 중요한 것은 추상화와 코드 재사용성을 높이기 위한 작업이기 때문에

간단히 메서드를 정의하여 작성한 풀이법입니다.

 

 

 

쉬운 문제였지만 알고리즘을 공부하면서 조금 더 나은 코드를 위해

작은 행동들이 "코드 리팩토링"을 도와줄 것으로 생각하며 포스팅 하였습니다.

 

 

 

출처

 

https://www.acmicpc.net/problem/14761

 

14761번: FizzBuzz

Print integers from 1 to N in order, each on its own line, replacing the ones divisible by X with Fizz, the ones divisible by Y with Buzz and ones divisible by both X and Y with FizzBuzz.

www.acmicpc.net

 

반응형