

내용을 조건에 상관없이 무조건 한 번은 실행시킨 후, 조건의 참/거짓 여부에 따라 반복하려고 할 때 유용하게 사용할 수 있는 문법 ⇒ 다른 조건문 대비 무한 루프에 빠지기 쉬우므로 주의가 필요함
do{
//무조건 한 번은 실행
//한 번 이후에는 `조건`이 참이면 실행
}while(조건);
소괄호안의 조건문이 참이면 블록({})안의 코드를 실행시킨다.
while(조건){
// `조건`이 참이면 실행
}
for문은 가장 많이 사용되는 일반적인 반복문이다.
for(초기값; 조건문; 증감식){
}
배열은 아니고 객체인데, 배열처럼 보이는 것
const str = “Hello” // str[0]과 같이 배열에 접근하듯 접근 가능
for-in문은 배열이나 객체를 반복할 때 사용한다.
for (let key in object) {
// 반복할 코드
}
key : 현재 객체 또는 배열의 속성 이름(또는 인덱스)을 담는다
object : 반복할 객체나 배열
let arr = ["banana", "apple", "orange"];
let obj = {name:"철수", age:20};
for(let index in arr){
console.log(index);
}
// 출력 결과 :
// 0
// 1
// 2
for(let key in obj){
console.log(obj[key]);
}
// 출력 결과 :
// 철수
// 20
이 때 대괄호 접근법을 사용하는 이유 : key값은 고정값이 아니라 참조하는 것이므로(다시 말해 key는 name도 될 수 있고, age도 될 수 있기 때문에) 동적 접근을 해야 한다.
동적 접근은 점 접근법으로는 불가하고 대괄호 접근법만을 사용해야 하기 때문이다.
for-of문은 배열을 반복할 때 사용하는 반복문이다.
for-of로는 객체를 반복할 수 없다. key 에 index값을 담는 for-in과 달리 값을 담는다.
let arr = ["banana", "apple", "orange"];
let obj = {name:"철수", age:20};
for(let key in arr){
console.log(index);
}
// 출력 결과 :
// banana
// apple
// orange
반복을 건너뛰게 하는 키워드
조건문 실행 중 continue를 만나면 해당 회차의 실행문을 건너 뛰고, 다음 회차로 넘어간다
⇒ 잘못 사용하면 무한 루프 행,,,
반복문을 종료하는 키워드
같은 코드를 문법적으로 다르게 표현했을 때의 속도 차이 👀
오늘 대부분의 시간은 코딩 문제를 푸는 데 썼다.
배운 내용을 바로 적용해서 푸는 문제여서 생각보다는 금방금방 풀렸는데, 소수 문제가 다른 문제 대비 오래 걸렸다...
아직까지 다중 반복문을 사용해야 하는 문제는 의사코드를 대강이라도 써보고 푸는 게 더 효율적인 것 같다.
// 의사코드
// 1부터 100까지 순회 => 값 i
// n이 0이 될 때까지 나눌 값 j
// 나눠 떨어진다? => 소수가 아님 //(i % j === 0)이면 bool = false;
// bool = true인 값만 result2 배열에 추가
let start = 1,
end = 100; // 범위
const result2 = [];
for (i = start; i <= end; i++) {
let bool = true;
if (i === 1) {
bool = false;
}
for (let j = 2; j < i; j++) {
if (i % j === 0) {
bool = false;
break;
}
}
if (bool) {
result2.push(i);
}
}
console.log(result2);
이 문제는 수영님, 민혁님이 조언을 주셨는데 제곱근을 사용해서 풀면 케이스를 절반으로 만들어서 풀 수 있다.
프로그래머스에서는 테스트 케이스 일부에 시간이 초과될 수 있다고 한다.
다음에 한번 더 풀어봐야지,,, ߹ - ߹
const isPrime = (number)=>{
if(number<=1) return false
if(number===2) return true
if(number%2===0) return false
for(let i=3;i<=Math.sqrt(number);i+=2){
if(number%i===0) return false
}
return true
}