100 이하의 자연수 A, B, C 중 가장 작은 값(최솟값)을 출력
function solution(a, b, c) {
let answer = 0;
switch (a < b) {
case true:
answer = a;
switch (answer < c) {
case true:
return answer;
case false:
answer = c;
return answer;
}
case false:
answer = b;
switch (answer < c) {
case true:
return answer;
case false:
answer = c;
return answer;
}
}
}
console.log(solution(11, 9, 13));
평소에 잘 사용하지 않았던 switch
조건문을 사용하여 풀이하였다.
solution(11, 9, 13)
함수를 호출함과 동시에 인자값으로 11, 9, 13을
solution
함수의 매개변수 값으로 전달한다.
let answer = 0;
결과값으로 반환 return
할 변수 answer
의 초기 값을
매개변수 a, b, c 와 무관한 값으로 설정한다.
a, b, c 중 하나를 초기값으로 설정해도 된다.
switch (a < b)
b 가 a 보다 크다면 조건문이 참이므로 case 문 true 가 동작하고,
a 값이 더 작은 값이므로 결과값을 담는 변수에 a 를 담고 다시 c 와 비교한다.
switch (answer < c)
c 가 a 값을 담은 answer 변수보다 크다면
a 값이 더 작기 때문에 그대로 answer 변수를
함수의 결과값으로 반환해준다.
answer 변수에 담겨진 a 값이 c 보다 크다면
c 의 값이 더 작기 때문에 answer 변수에
c 의 값을 담아주고 함수의 결과값으로 반환해준다.
switch (a < b)
a 가 b 보다 크다면 조건문이 거짓이므로 case 문 false가 동작하고,
b 값이 더 작은 값이므로 결과값을 담는 변수에 b 를 담고 다시 c 와 비교한다.
switch (answer < c)
c 가 b 값을 담은 answer 변수보다 크다면
b 의 값이 더 작기 때문에 그대로 answer 변수를
함수의 결과값으로 반환해준다.
answer 변수에 담겨진 b 값이 c 보다 크다면
c 의 값이 더 작기 때문에 answer 변수에
c 의 값을 담아주고 함수의 결과값으로 반환해준다.
이 풀이 방법은 C 언어로
switch case
값을 0, 1로 사용한 예제를 참고하였는데,
자바스크립트에서는switch case
값을 0(false) 과 1(true)로 사용했더니
undefined 가 출력되었다.
function solution(a, b, c){
let answer = Math.min(a, b, c);
return answer;
}
console.log(solution(11, 9, 13));
solution(11, 9, 13)
자연수 a, b, c의 값 11, 9, 13 을 solution
함수 호출과 동시에
함수의 인자값으로 전달한다.
Math.min(a, b, c)
전달 된 인자는 solution
함수의 매개변수 값이 되고,
내장 객체인 Math.min()
함수안에 매개변수
a, b, c
을 인자값으로 넣어주면
인자로 받은 값들 중 가장 작은 값을 반환한다.
let answer = Math.min(a, b, c);
내장 객체를 통해 반환 된 가장 작은 값을 변수 answer
에 넣어
solution
함수의 결과값으로 반환 return
하면,
solution(11, 9, 13)
함수가 반환한 결과값은 9 이므로 출력결과는 9가 된다.
인자는 함수를 호출할 때 어떠한 값을 전달하는 값,
매개변수는 전달 된 인자값을 함수안에서 변수로 사용하는 값이다.
자바에서 Math.min 을 사용한 경험이 있었는데,
자바스크립트에서는 2개 이상을 인자값으로 넣어도 되지만,
자바에서는 두 개의 인자값을 받는다.
function solution(a, b, c){
let number = [];
number.push(a, b, c);
let answer = Math.min(...number);
return answer;
}
console.log(solution(11, 9, 13));
solution(a, b, c)
인자로 받아온 매개변수의 값을
let number = [];
number.push(a, b, c)
빈 배열 number
에 넣는다.
내장 객체 Math.min
함수는 배열이 아닌 숫자값을 인자로 받는다.
ES6 문법 spead 연산자(전개 구문, 펼침 연산자) ...
는
배열, 문자열, 객체의 값을 분리하기 때문에
let answer = Math.min(...number);
(...[배열이름])
로 인자값을 넣어 최소값을 구할 수 있다.
Math
함수에 apply
메서드를 사용하면
숫자로 이루어진 배열을 인자로 전달할 수 있다.
하지만, 배열 안에 비교 할 수 없는 값이 있다면
결과 값은 숫자가 아닌 nan 을 갖는다.
배열의 크기가 큰 경우 Maximum call stack size exceeded
오류가 발생하므로 배열의 크기가 크지 않은 경우에 사용한다.
function solution(num){
let answer = Math.min(...num);
return answer;
}
let random = [];
for(let i=0; i < 3; i++){
let n = Math.floor(Math.random()*100)+1;
random.push(n);
}
console.log(solution(random));
solution(random)
solution
함수의 인자값으로 random 배열을 받는데,
이 때 random 배열의 값은 함수를 호출하기 전에 만들어진다.
랜덤으로 생성되는 값은 for
반복문을 통해 배열안에 위치하게 된다.
let i=0
i 변수는 반복문의 수행 횟수를 의미하는 변수로
i 가 0 의 값으로 반복문을 시작하면서 i++
로 인해 i 의 값이 증가하다가
i 의 값이 3 이 되면 이 반복문은 종료되므로,
배열 [0, 1, 2] 인덱스에 랜덤으로 생성된 3 개의 수가 위치하게 된다.
let answer = Math.min(...num);
내장 객체 함수 Math.min
의 인자값은
객체, 문자열, 배열을 직접 넣어줄 수 없기 때문에,
spead 문법 ...
을 사용한다.
function solution(arr){
let answer = Math.min(...arr);
return answer;
}
let randomArr = [];
for(let i=0; i < 3; i++){
let randomNum = Math.floor(Math.random()*100)+1;
if (randomArr.indexOf(randomNum) === -1) {
randomArr.push(randomNum);
} else {
i--;
}
}
console.log(solution(randomArr));
숫자를 랜덤으로 받아 최소값을 구하는 방법은
배열에 중복값이 저장되는 문제가 있다.
배열안에 있는 값 randomArr
과 랜덤으로 생성되는 값 randomNum
이
같은지 비교하면 이 문제를 해결할 수 있다.
배열에서 중복되는 숫자를 찾기 위해 indexOf
메소드를 사용한다.
indexOf
는 메소드 안에 찾는 값을 인자로 받는다.
if (randomArr.indexOf(randomNum) === -1)
찾는 값이 없다면 -1 반환하기 때문에,
randomArr.push(randomNum);
이는 중복값이 없다는 의미이므로 배열에 랜덤으로 생성되는 값을 넣어준다.
i--;
중복값이 있는 경우 배열안에 값을 다시 넣어주어야 하므로
순환을 도는 i 의 값을 감소시킨다.