TIL. 반복문

김은서·2022년 6월 28일
0

TIL

목록 보기
5/52

반복문(lteration)

같거나 비슷한 코드를 여러 번 실행시켜야 할 경우에 쓰는 구문

for 구문

반복할 조건을 초기화, 조건식, 증감문 순으로 넣어줌

for(초기화; 조건식; 증감문){
  반복할 코드
}

while 구문

반복한 조건중, 초기화, 증감문은 따로, 조건식만 괄호 안에 넣어줌

let 초기화;

while(조건식){
  반복할 코드
  증감문
}

Q.
(의사코드를 적는 연습을 해야겠다... )

Q.17
// 수학 시간에 분명히 배운 '소수'
// 소수: 수학에서 1과 그수 자신 외에는 나누어 떨어지지 않는 수, 단 1보다 큰 자연수
// 1. 1보다 커야 한다.
// 2. 2를 제외한 짝수는 소수가 아니에요.
// 3. 3부터 자기 자신(num) 전까지 for문으로 반복해서, 하나라도 나누어 떨어지는 수가 나온다. -> 소수가 아니다.
function isPrime(num) {
  // 1이면 소수가 아니다.
  if(num === 1) {
    return false;
  } 
  if (num === 2) {
    return true;
  }
  // 짝수는 소수가 아니다.
  if (num % 2 === 0) {
    return false;
  }
  // 리팩토링 -> 더 좋은 코드로 바꾸는거
  // 제곱근 -> 코드가 반복되는 횟수가 줄어든다.
  // 제곱근이 존재한다 -> 소수가 아니다.
  // num까지 반복할 필요 없이 제곱근까지만 확인해서, 만약에 제곱근이 있으면, false;
  // Math.floor -> 소수점 버림
  let sqrt = Math.floor(Math.sqrt(num))
  for (let i = 3; i <= sqrt; i++) {
    if (num % i === 0) {
      return false;
    }
  }
  return true;
}
Q.18
// 17번은 그냥 소수인지 아닌지만 판단해서 불린
// num까지의 목록을 가져와라.
function listPrimes(num) {
  // 2이상이기 때문에, 문자열 '2'를 담은 변수를 만든 다음, 2에다가 '-?-?-....'
  let result = '2';
  // 홀수 중에서 소수를 찾아보자.
  for (let i = 3; i <= num; i += 2) {
    // 소수인지, 아닌지 판단할 수 있는 불린값으로 판단할 수 있는 변수
    let isPrime = true;
    let sqrt = Math.floor(Math.sqrt(i))
    for (let j = 3; j <= sqrt; j+= 2) {
      // 이 조건 통과하면 소수
      // 못하면 소수 아님
      if (i % j === 0) {
        isPrime = false;
      }
    }
    if (isPrime === true) {
      // isPrime이 true일 경우
      // result (현재는 '2') -?-?-?-?
      result = `${result}-${i}`
    }
  }
  return result;
}
Q.19
function makePermutations(str) {
  // 입력값: 문자열 ex) '123'
  // 출력값: 해당 문자열에 등장하는 각 문자(letter)를 가지고 만들 수 있는 길이 2의 문자열 ex) '11,12,13,21,22,23,31,32,33'
  // '첫번째 문자 + 첫번째 문자, 첫번째문자 + 두번째문자 ... 마지막 문자 + 마지막 문자'
  let result = '';
  // 이중반복문을 돌려야 한다.
  // 첫번째 반복문이 실행되는 동안 i는 그대로 있고, j는 계속 바뀐다.
  for (let i = 0; i < str.length; i++) {
    for (let j = 0; j < str.length; j++) {
      result = result + `${str[i]}${str[j]},`
    }
  }
  //'11,12,13,21,22,23,31,32,33,' ->  '11,12,13,21,22,23,31,32,33'
  return result.slice(0, result.length - 1);
}
Q.20
function hasRepeatedCharacter(str) {
  // 입력값: 문자열 str
  // 출력값: 불린 -> 문자열에 중복된 문자(letter)가 존재하는지 여부를 리턴해야 합니다.
  // 이중반복문
  // 첫번째 문자랑 -> 두번째문자, 세번째문자... 끝까지 비교
  // 두번째 문자랑 -> 세번째문자, 네번째문자 ... 끝까지 비교
  for(let i = 0; i < str.length; i++) {
    for(let j = i + 1; j < str.length; j++) {
      if (str[i] === str[j]) {
        return true;
      } 
    }
  }
Q.21
function makeMarginalString(str) {
  // 입력값 : 문자열 str ex) 'flower'
  // 출력값 : 한 글자를 추가할 때마다 부분적으로 완성된 문자열을 전부 이어붙인 문자열 ex) 'fflfloflowfloweflower'
  // <결국 이중 반복문 필요>
  // 첫번째 반복문 -> 길이만큼 반복 -> 반복횟수를 결정
  // 두번째 반복문 -> 몇 개의 문자를 붙일 건지 결정
  // 0: ''
  // 1: '' + 'f'
  // 2: '' + 'f' + 'fl'
  // 3: '' + 'f' + 'fl' + 'flo'
  // 4: '' + 'f' + 'fl' + 'flo' + 'flow'
  // 5: '' + 'f' + 'fl' + 'flo' + 'flow' + flowe'
  // 6: '' + 'f' + 'fl' + 'flo' + 'flow' + flowe' + 'flower'

  let result = '';
  for (let i = 0; i < str.length; i++) {
    for (let j = 0; j <= i; j++) {
      result = result + str[j]
    }
  }
  return result;
}

0개의 댓글