for (let i = 0; i < 5; i++
))을 응용하여 다양한 for문을 제작
// 기본
let sum = 1
for (n = 2; n <= 4; n = n + 1) { // n++
sum = sum + n;
}
console.log(sum) // 10
// 두번째: 문자열 도출
for (let n=0; n<5; n++) {
console.log('Hello World')
} // Hello World 5번
// 세번째: 구구단, 조건 num * n, n이 1부터 9까지 반복돼야함
function mulTablePrinter(num) {
for (let n = 1; n <= 9; n = n + 1) {
console.log(num * n)
}
}
for (n=1; n<=9; n++) { // 반복문의 반복문 활용
console.log(mulTablePrinter(n))
}
++x
: 먼저 피연산자의 값을 1 증가시킨 후에 해당 연산을 진행함.
x++
: 먼저 해당 연산을 수행하고 나서, 피연산자의 값을 1 증가시킴.
--x
: 먼저 피연산자의 값을 1 감소시킨 후에 해당 연산을 진행함.
x--
: 먼저 해당 연산을 수행하고 나서, 피연산자의 값을 1 감소시킴.
let sum = 1;
let n = 2;
while (n <= 4) {
sum = sum + n;
n = n + 1
}
console.log(sum)
function isOdd(num) {
// TODO: 여기에 코드를 작성합니다.
if (num < 0) {
num = Math.abs(num)
}
while (num >= 0) {
if (num === 1) {
return true
} else if (num === 0) {
return false
}
num -= 2;
}
}
function isPrime(num) {
if (num === 0 || num === 1) {
return false;
}
if (num === 2) {
return true;
}
if (num % 2 === 0) { // 제곱근 안쓰면 짝수 빼는 조건문 안써도 됨
return false;
}
let divisor = 3;
while (divisor < Math.sqrt(num)) {
if (num % divisor === 0) {
return false;
}
divisor += 2
}
return true;
}
for문 사용,인자는 모두 >=0
function makeMultiplesOfDigit2(num1, num2) {
let small = num1;
let big = num2;
let count = 0;
if (num1 > num2) {
big = num1;
small = num2;
}
for(i = small; i <= big; i++) {
if (i % 2 === 0 && i !== 0) { // 2의 배수를 거름
count += 1 // 개수 리턴
}
}
return count;
}
소수 : 약수가 1과 자기자신 뿐인 수
// 17. 1 이상의 자연수를 입력, 불린 데이터 출력
function isPrime(num) {
if (num === 1) { // 1은 소수 아님
return false;
}
if (num === 2) { // 2를 제외한 짝수는 소수가 아님
return true;
}
// 기본형
for (devisor = 2; divisor < num; divisor++) { // 소수판별: 2부터 num-1까지 나눈 나머지가 0이 아님
if (num % divisor === 0) {
return false;
}
}
// 범위 줄임: 약수의 대칭 특성을 이용함, 시간복잡도 ⬇️
for (i = 3; i < Math.sqrt(num); i += 2) { // 약수의 절반만 보면 되니 ⭐️제곱근으로, 짝수 예외 처리
if (num % i === 0) {
return false;
}
}
return true;
}
num
이 커지면 커질 수록 출력값의 길이가 늘어남: 17번처럼 판별에서 끝나는 게 아니라 출력을 num까지의 소수를 계속 해줘야하기에 반복문이 필요, 써줘야함문자열 작성 반복문
X 소수 판별 반복문
이 됨// 18. `num >= 2`부터 입력, 소수를 걸러 `num`까지 소수들을 출력: '2-3-5-...'
function listPrimes (num) {
// 2를 선언, 범위 제거('+= 2')로 짝수 예외 처리
let prime = '2';
// divisor가 소수라면 if문에 넣어줄지 말지
for (divisor = 3; divisor <= num; divisor += 2) { // 문자열 작성 반복문
// 3 5 7 9 11 13 15... : 문자열에 쓸지말지의 범위를 정함
// ⭐️divisor가 새로 돌 때마다 true로 초기화
let train = true;
// for(let k = j * 2; k <= num; k += divisor){로 더 줄일 수 있음
for (i = divisor; i < divisor; i += 2) { // 소수 판별 반복문
// 3 5 7 9 11 13 15... : 소수 판별, ⭐️제곱근 써줘도 됨
if (divisor % i === 0) {
train = false;
// 시간복잡도를 줄이기 위해 break 삽입
break // 안써줘도 if문이 한번이라도 만족하면 train이 false가 돼버려 문자열에 안나옴
}
}
if (train === true) { // 불린을 받아 문자열 반환
prime = `${prime}-${divisor}`
}
}
return prime
}
의사코드
1. 소수 판별 해야함
2. 소수 판별 후 걸러진 것들을 일일이 순서대로 써줘야함 - 입력된 숫자 속 여러개의 소수를 전부 써줘야하기에 !반복문!
3. 그러므로 판별 후 써줘야 하기에 2부터 num까지의 숫자들 제시 - 판별 반복문 - 소수 출력 문자열 순으로 과정을 이해: 숫자 제시 안 2가지 모듈을 장착
4. 그래서 문자열 작성 기계가 let
, for(안의 for)
, if
순으로 짝수 거름 - 소수 판별 - 문자열 배치의 구성으로 작성해야함
5. 작성하고 시간복잡도를 줄일 수 있는 방안 모색
⭐️팁
debugger; 함수()
: 브라우저가 명령을 처리하는 과정을 보여주고 변수의 값에 뭐가 있는지 보여줌, 진짜 좋음! 코드에 어디가 문제인지 보여줌!! 특히 반복문!