[TIL / DAY 8] 반복문, 유사 배열 객체, 벤치 테스트

miseullang·2024년 10월 23일
post-thumbnail

🆕 새롭게 알게 된 것

📍 반복문


do-while

내용을 조건에 상관없이 무조건 한 번은 실행시킨 후, 조건의 참/거짓 여부에 따라 반복하려고 할 때 유용하게 사용할 수 있는 문법 ⇒ 다른 조건문 대비 무한 루프에 빠지기 쉬우므로 주의가 필요함

do{
  //무조건 한 번은 실행
  //한 번 이후에는 `조건`이 참이면 실행
}while(조건);

while

소괄호안의 조건문이 참이면 블록({})안의 코드를 실행시킨다.

while(조건){
  // `조건`이 참이면 실행
}

for

for문은 가장 많이 사용되는 일반적인 반복문이다.

for(초기값; 조건문; 증감식){

}

[🧀 / add] 유사 배열 객체


배열은 아니고 객체인데, 배열처럼 보이는 것

const str = “Hello” // str[0]과 같이 배열에 접근하듯 접근 가능

for-in

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문은 배열을 반복할 때 사용하는 반복문이다.

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

반복을 건너뛰게 하는 키워드

조건문 실행 중 continue를 만나면 해당 회차의 실행문을 건너 뛰고, 다음 회차로 넘어간다

⇒ 잘못 사용하면 무한 루프 행,,,

break

반복문을 종료하는 키워드

🧀 TIP : JS코드 벤치 테스트


https://jsbench.me/

같은 코드를 문법적으로 다르게 표현했을 때의 속도 차이 👀



✅ 정리

오늘 대부분의 시간은 코딩 문제를 푸는 데 썼다.
배운 내용을 바로 적용해서 푸는 문제여서 생각보다는 금방금방 풀렸는데, 소수 문제가 다른 문제 대비 오래 걸렸다...

아직까지 다중 반복문을 사용해야 하는 문제는 의사코드를 대강이라도 써보고 푸는 게 더 효율적인 것 같다.

[🧀 / recap] 소수 구하기


// 의사코드
// 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
  }
profile
괴발개발 💻

0개의 댓글