1번. FizzBuzz

 - 1부터 100까지 console.log를 실행한다.

 - 3의 배수는 "fizz"라는 문자열을 로그한다.

 - 5의 배수는 "buzz"라는 문자열을 로그한다.

 - 3과 5의 공배수는 "fizzbuzz"라는 문자열을 로그한다.

 - 나머지 숫자들은 해당 숫자 자체를 로그한다.

for ( var i = 1; i < 101; i++) {
	if ((i%15) === 0) {
		console.log("fizzbuzz", "i의 값 : " + i);
	} else if ((i%3) === 0) {
		console.log("fizz", "i의 값 : " + i);
	} else if ((i%5) === 0) {
		console.log("buzz", "i의 값 : " + i);
	} else {
		console.log(i, "i의 값 : " + i);
	}
}

3과 5의 공배수엔 15 배수의 문자열일 때에는 fizzbuzz가 최우선으로 실행되어야 한다. 따라서 15일 때 조건문을 가장 위에 넣었다. 3과 5가 겹치지 않는 숫자일 때에는 알아서 각자의 경우를 찾아가기 때문에 3과 5의 조건문 위치가 바뀌어도 상관 없다.

 

2번. Biggest Number

 - 가장 큰 수가 출력되도록 해라.

var a = -Infinity;
var b = NaN;
var c = Infinity;

if (a >= b && a >= c) {
    if (a === b && a === c) {
        console.log('가장 큰 수 a = ' + a);
        console.log('가장 큰 수 b = ' + b);
        console.log('가장 큰 수 c = ' + c);
    } else if (a === c) {
        console.log('가장 큰 수 a = ' + a);
        console.log('가장 큰 수 c = ' + c);
    } else if (a === b) {
        console.log('가장 큰 수 a = ' + a);
        console.log('가장 큰 수 b = ' + b);
    } else {
        console.log('가장 큰 수 a = ' + a);
    }
}   else if (b >= a && b >= c) {
    if (b === a && b === c) {
        console.log('가장 큰 수 a = ' + a);
        console.log('가장 큰 수 b = ' + b);
        console.log('가장 큰 수 c = ' + c);
    } else if (b === c) {
        console.log('가장 큰 수 b = ' + b);
        console.log('가장 큰 수 c = ' + c);
    } else if (b === a) {
        console.log('가장 큰 수 a = ' + a);
        console.log('가장 큰 수 b = ' + b);
    } else {
        console.log('가장 큰 수 b = ' + b);
    }
}   else if (c >= a && c >= b) {
    if (c === a && c === b) {
        console.log('가장 큰 수 a = ' + a);
        console.log('가장 큰 수 b = ' + b);
        console.log('가장 큰 수 c = ' + c);
    } else if (c === b) {
        console.log('가장 큰 수 b = ' + b);
        console.log('가장 큰 수 c = ' + c);
    } else if (c === a) {
        console.log('가장 큰 수 a = ' + a);
        console.log('가장 큰 수 c = ' + c);
    } else {
        console.log('가장 큰 수 c = ' + c);
    }
}   else {
        console.log('Is this Number?')
}

가장 큰 수를 고르라면 누구나 당연하게 별 생각 없이 큰 수를 고를텐데, 나의 뇌가 어떻게 이 큰 수를 비교할까를 생각하며 코드를 짜니 조금 머리 아프다.

 

a, b, c 모두 같을 수 있지 않은가! 숫자가 아닌 것이 섞여 있을 수도 있다. a = b = c일 때가 가장 우선 순위로 와야 한다는 것도 생각해야 한다. 안그러면 a = b =c 상황에서 a랑 b만 출력될 수도 있다.

 

별거 아닌 것 같은데도 길게 쓰여졌다... Prep Guide보면 Math.max를 사용하면 간단하단다. 어쨋든 위의 경우는 어떤 수를 대입하더라도, 숫자가 아닌 값을 대입하더라도 적절한 결과를 도출해내는 것을 확인했다.

 

이 또한 중복이 많은데 더 좋은 방법이 있을 것 같습니다. 알려주시면 감사드리겠습니다!

 

3번. Word Position

 - 문장 속에서 단어를 찾고 단어의 처음 Index와 마지막 Index를 출력하라.

var word = ',';
var sentence = 'Hi guys, just call me SeungJun. How are you?';

var first = sentence.indexOf(word);
var second = first + word.length - 1;

if (first === -1) {
    console.log('Sorry, I cannot find it.');
} else if (isNaN(first) === false && isNaN(second) === false) {
    console.log(first, second);
}

찾을 수 없다면 'Sorry, I cannot find it'이라는 문구를 띄우게 했다. 숫자가 아닌 값이 대입되면 에러가 뜬다. 또한 한 자릿수의 글자를 대입하게 된다면 이 또한 적절하게 값이 출력된다. 위의 경우 처럼 ,를 대입하면 7 7이 뜬다.

 

안타깝게도 H를 대입했을 때 두번 째 H의 Index값은 출력되지 않는다...

 

 

 

누군가에겐 간단한 문제이지만 나에겐 조금 생각이 필요한데 풀어나가고 해답이 보이는 과정이 꽤 재밌다! 방해 요소가 없는 한 몰입해서 하게 되고 꼭 풀고 싶어진다. 시간도 엄청 잘 지나간다. 이러한 문제를 푸는 것도 알고리즘의 한 부분일까?

 

+ Recent posts