[LeetCode] Fizz Buzz(JS)

nRecode·2020년 9월 4일
0

Algorithm

목록 보기
4/48

문제

Write a program that outputs the string representation of numbers from 1 to n.

But for multiples of three it should output “Fizz” instead of the number and for the multiples of five output “Buzz”. For numbers which are multiples of both three and five output “FizzBuzz”.

입출력 예

Example

n = 15,

Return:
[
    "1",
    "2",
    "Fizz",
    "4",
    "Buzz",
    "Fizz",
    "7",
    "8",
    "Fizz",
    "Buzz",
    "11",
    "Fizz",
    "13",
    "14",
    "FizzBuzz"
]

접근

이 문제의 첫인상은 3, 6, 9문제와 비슷하다는 느낌이 들었다ㅋㅋ 다른점은 3의 배수만 짝 하는게 아니라 5의 배수 역시 쩍 해줘야하고 3과 5의 공통된 배수는 짝쩍 해줘야 한다는 점이다.

  1. for문을 이용해서 1부터 input n까지 돌린다.
  2. 3과 5 모두 공통되는 배수이면 FizzBuzz를 배열에 담아야하므로 조건문의 맨 위에 위치하도록 한다.
  3. 3과 5의 배수를 Fizz, Buzz를 각각 배열에 담는다.
  4. 배열을 return

풀이

var fizzBuzz = function(n) {
    // [1,2,"Fizz",4,"Buzz","Fizz",7,8,"Fizz","Buzz"];
    // for -> 1~n, push 
    
    // for 으로 하는 방법
    let result = [];
    for(let i = 1; i <= n; i++){
        if(i % 3 === 0 && i % 5 === 0 ) result.push("FizzBuzz");
        else if(i % 3 === 0) result.push("Fizz");
        else if(i % 5 === 0 ) result.push("Buzz");
        else result.push(i.toString());
    } 
    return result;
};

for문으로 n만큼 돌아야 하기 때문에 시간복잡도는 O(n)으로 추정된다.

또 다른 풀이

var fizzBuzz = function(n) {
    // 2. map
    return new Array(n).fill(0).map((val, idx) => (++idx % 3 ? '': 'Fizz') + (idx % 5 ? '': 'Buzz') || '' + idx);
};
  1. 부터 시작하므로 ++idx 값을 사용
  2. 3으로 나누어지면 fizz 5로 나누어지면 buzz. 둘 다 나누어지면 둘을 더한다.
  3. (++idx % 3 ? '': 'Fizz') // 3으로 나눈 나머지가 있으면 '' 없으면(배수이면) 'Fizz'
  4. (idx % 5 ? '': 'Buzz') // 5로 나눈 나머지가 있으면 '' 없으면(배수이면) 'Buzz'
  5. (++idx % 3 ? '': 'Fizz') + (idx % 5 ? '': 'Buzz') // 3의 배수임과 동시에 5의 배수이면 'Fizz' + 'Buzz'
  6. (생략)|| '' + idx) // 3의 배수도 5의 배수도 아니면 생략 부분이 ''이 될테고, 그러면 인덱스 값을 문자열로 바꾼다.

😀

profile
안정성, 확장성 있는 서버를 구축하고 가꾸는 개발자를 목표로 공부하고 있습니다. 🤔🤔🤔🤔 부족하기에 맞지 않는 내용이 있을 수 있습니다. 가감없이 피드백 해주시면 정말 감사하겠습니다..🙏

0개의 댓글