[2주차] 코플릿 반복문 오답노트 - 4일차

애륀·2022년 6월 27일
0

오늘 풀었던 문제 중 헷갈리는 문제 or 답을 봐도 모르는 문제에 대해 오답노트를 작성하려고 한다.

8.

 let result = ''

오늘 코플릿에서 빈 문자를 초기화 시키는 작업을 자주 했다.
반복문을 통해 나온 결과를 result에 넣어 출력해야하기 때문이다.

10.

function makeMultiplesOfDigit2(num1, num2) {
  // TODO: 여기에 코드를 작성합니다.
  // makeMultiplesOfDigit2(8, 12);
  //8 9 10 11 12 중 2의 배수 개수 출력 : 8 10 12(3개)
  let count = 0;
  let start = num1;
  let end =num2;

  if(num1 > num2){ // 왼쪽 값이 더 클 수 있기 때문에 서로 switch를 해줘야 한다. 
    start = num2;
    end = num1;
  }

  if(start === 0){
    start =1; // 1로 초기화시키면 for문에서 2의 배수가 아니기 때문에 count는 0이 된다.
  }

  for(let n =start; n<=end; n++){
    if(n% 2=== 0){
      count += 1
    }
  }
  return count
}

12.

function getMaxNumberFromString(str) {
  // TODO: 여기에 코드를 작성합니다.
  let result = 0
  for (let n = 1; n<=str.length; n++){
    if(parseInt(str[n]) > result){
      result = str[n]
    }
  }
  return String(result);
}

parseInt()를 쓸 생각을 못했다. 가장 큰 값을 찾기 위해서는 문자열을 숫자로 바꿔주는 작업이 필요하고, 문자열 길이만큼 반복하기 때문에 result보다 큰 값을 발견하면 그것이 최댓값이 되는 것이다.

13.

function replaceAll(str, from, to) {
  // TODO: 여기에 코드를 작성합니다.
  let result = ''
  for (let n = 0; n<str.length; n++){
    if(str[n]===from){
      result += to //변수 result에는 +to가 되어야 한다.
    }
    else {
      result += str[n]
    }
  }
  return result
}

이해가 되었다.
result += to처럼 쓰는 이유는 만약 문자열에서 from이 발견되면 to를 넣어 문자를 바꿔줄 수 있다.

15.

Math.pow, 거듭제곱 연산자를 사용하지 않고 반복문을 통해 문제를 풀어야 한다.

    result *= base

그렇다.
result =1; 로 초기화 시켜 base 값을 exponent만큼 반복하면 되는 것이였다.
(나는 Math.pow 쓰는 방법만 알았다..)

18.

function listPrimes(num){
  let result = '2' // 2는 무조건 소수이기 때문에 2부터 시작
  for(let i = 3; i <= num; i=i+2) { //모든 짝수는 소수가 아니므로 홀수만 더해서 확인
    let isprime = true; // 반복문안에 소수가 맞는지 값을 담아줄 변수를 선언해주고, 소수가 아니라면 false로 바꿔준다
    for(let j = 2; j < i; j++){ // num을 나눌 숫자 j 를 반복한다 
      if(i%j === 0){ // i가 j로 나누어 떨어지면 1과 자기자신 이외의 약수가 있으니 소수가 아니다
        isprime = false; // 소수가 아닌걸 확인하면 그 뒤까지 돌아볼 필요가 없으니 break문로 끝내주면 된다.
        break;     
      }
    }  
    // 안의 조건문을 끝내고 나왔고 소수가 아니면 false로 바뀌었다
    // isprime true라면 소수이니 result에 넣어준다 
    if(isprime === true){
      result += `-${i}`; // result = result + '-' + i; 와 동일
    }  
  }
  return result
}

여기서 가장 중요한 점은 소수가 아니면 false로 바뀌게 되어 true일 때만 출력하게 된다.

21.

result = result + str[j];

let output = makeMarginalString('abc');
console.log(output);

✨ 만약 console.log(result = str[j]);를 출력하게 되면
'a','a',
'b','a', 'b',
'c','c'
가 출력된다.

✨ console.log(result = result + str[j])를 출력하게 되면
'a','aa','aab','aab', 'aaba','aabab','aababc','aababc'
결과적으로 'aababc' 출력된다.

사실 마지막 출력과정만 봐도 이해가 안될 수 있다.
실제 사람이 a를 추가하면 a가 따라오고, b를 적으면 b가 따라와서 ab가 되고, 마지막으로 c를 적으면 c가 따라와서 abc가 된다.

0개의 댓글