728x90
반응형
1. 양수 음수 구하기
사용자가 프롬프트 창에 숫자를 입력했을 때 그 숫자를 함수로 넘겨주고, 함수에서는 숫자가 양수인지, 음수인지,
또는 0인지 판단해서 알림 창에 보여 주는 프로그램을 작성해 보세요.
힌트
- 숫자를 받아서 양수, 음수,0을 판단하고 알림 창에 표시하는 함수를 선언합니다.
- 반환값이 숫자일 경우에만 함수를 실행합니다.
- parseint() 함수를 사용해 프롬프트 창에 입력한 내용을 숫자로 변환합니다.
const num = parseInt(prompt("숫자입력.")); //parseInt()는 문자열을 실수로 바꾸는 함수. 사용자가 입력할 때 문자열이기 때문에 변경이 필요하다.
if(num>0) {
alert("양수입니다.");
} else if(num<0) {
alert("음수입니다.");
} else {
alert("None"); //
}
//if-else-if 조건문을 사용해서 입력된 정수가 양수인지, 음수인지, 아니면 NaN인지 판별
2. 최대공약수 구하기
2개의 숫자를 입력받아 두 수의 최대공약수를 구하는 함수를 작성하고 테스트해 보세요. 예를 들어 4와 12의 최대공약수는 4가 됩니다. 즉, 두 수 모두 나누어 떨어지는 수 중에서 가장 큰 값이 최대공약수입니다.
힌트
- 주어진 두 수 중에서 어떤 수가 큰 수인지 확인합니다.
- 두 수가 모두 나누어떨어져야 하므로두 수 중에서 큰 수까지 반복하면서 작은 수도 나누어떨어지고, 큰 수도 나누어 떨어지는 숫자를 찾습니다.
- 찾을 때마다 변수에 할당합니다. 반복이 모두 끝나면 변수에는 가장 마지막에 할당된 약후만 남습니다.
사실 이 문제는 어떻게 시작해야 할 지부터를 모르겠어서 GDT의 도움을 구했다.
GDT는 함수 if와 return을 사용하여 코드를 작성했고 이 방식을 재귀함수라고 한다고 한다.
따로 찾아본 방식으로는 반복문이 있었다. 그러므로 이 문제에는 총 2가지의 풀이법이 존재한다.
1. 반복문
int gcd(int a, int b){
int tmp, n;
//a에 큰 값을 위치시키기 위한 조건문
if(a<b){
tmp = a;
a = b;
b = tmp;
}
//큰 값을 a에, 작은 값을 b에 대입
// 유클리드 알고리즘 부분
while(b!=0){
n = a%b;
a = b;
b = n;
}
return a;
}
// b가 0이 될때까지(a%b), 반복문을 돌게되고, b가 0인 순간의 a를 GCD로 판단하고 리턴
2. 재귀함수
int gcd(int a, int b){
if(b == 0){
return a;
}else{
return gcd(b, a%b);
}
}
유클리드 알고리즘
- 유클리드 알고리즘은 주어진 두 수 사이에 존재하는 최대공약수(GCD)를 구하는 알고리즘 입니다.
- GCD - greatest common divisor
GDT를 참고해서 반복문으로 작성을 했지만 여전히 이해하는 것은 어려웠다. 😢
그래서 이번에는 답지를 보았다.
function getGCD(n, m) { //n과 m 중에서 큰 값을 max에 대입
let max = n > m ? n : m;
let x = 0;
for (let i = 1; i <= max; i++) {
if (n % i === 0 && m % i === 0) {
x = i; // i 최대공약수
}
}
return x;
}
console.log(`308과 20의 최대공약수 : ${getGCD(308, 20)}`);
console.log(`45과 38의 최대공약수 : ${getGCD(45, 38)}`);
답지에서는 for반복문과 if 조건문을 사용했다. for반복문을 사용해서 1부터 끝까지 수를 검사했고 만약 i가 n과 m의 약수이면, GCD에 i를 대입한다. for 반복이 끝나면 GCD를 리턴(반환)한다.
return
'return 명령문은 함수 실행을 종료하고 주어진 값을 함수 호출 지점으로 반환합니다.'
- 함수 중단
- 주어진 값을 함수 호출 지점으로 반환
함수에서 return 명령문에 도달하면 함수의 실행은 그 지점에서 중단되고,
값을 제공한 경우는 함수를 호출한 곳에 그 값을 반환하는데, 이때 값을 명시하지 않으면 undefined를 반환한다.