TIL 24.10.23

윤지·2024년 10월 23일
post-thumbnail

📚 TIL

반복문

✏️ 연습문제

1. 피보나치 수열 계산

피보나치 수열의 특정 항까지 계산하는 예제입니다.

  • 문제: 주어진 정수 N에 대해, 피보나치 수열의 처음 N항을 출력하는 프로그램을 작성하시오.
  • 입력: N (정수, 1 이상)
  • 출력: 피보나치 수열의 처음 N항을 배열로 출력.
  • 조건: 1항은 0, 2항은 1 이라고 가정합니다.
  • 예시:
    • 입력: 10
    • 출력: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
  • 설명: 피보나치 수열은 앞의 두 수의 합으로 다음 수를 생성하는 수열이다. 첫 두 항은 0과 1이다.

내 풀이

let n = 10; // 원하는 항의 수
let result = [0, 1]; //배열

for (let i = 0; i < n - 2; i++) {
  result.push(result[i] + result[i + 1]);
}
console.log(`피보나치 수열(${n}항):`, result);

강사님 풀이

const n = 10;
let a = 0; // 1항
let b = 1; // 2항
let temp = null; // 0
const results = []; // [0]

for (let i = 0; i < n; i++) {
  results.push(a);
  temp = a;
  a = b;
  b = temp + b;
}

console.log(results);

temp로 임시 저장소를 만들어서 구할 수도 있었다

2. 소수 찾기

  • 문제: 1부터 100까지의 소수를 찾아 출력하는 프로그램을 작성하시오.
  • 입력: 없음
  • 출력: 1부터 100까지의 소수를 배열로 출력.
  • 예시:
    • 출력: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
  • 설명: 소수는 1과 자신만을 약수로 가지는 자연수이다. 이 프로그램은 2부터 100까지의 숫자 중 소수를 찾는다.

내 풀이

let results = [];

for (let i = 1; i <= 100; i++) {
  if (i === 1) continue; // 1은 소수가 아니므로 건너뛰기
  let isPrime = true;
  for (let j = 2; j < i; j++) {
    if (i % j === 0) {
      isPrime = false;
      break;
    }
  }
  if (isPrime) {
    results.push(i);
  }
}
console.log(results);

소수를 구하는 수학적인 방법과 중첩 반복문을 사용해야 한다는 건 이해했지만, 소수로 판별된 숫자들을 배열에 어떻게 추가해야 되는지 몰라서 못풀었었는데... 😵‍💫
불리언 값을 활용해서 풀 수 있었다

3. 배열 요소의 합 구하기

  • 문제: 주어진 숫자 배열의 모든 요소의 합을 계산하는 프로그램을 작성하시오.
  • 입력: numbers (배열, 예: [5, 10, 15, 20, 25])
  • 출력: 배열 요소의 합.
  • 예시:
    • 입력: [5, 10, 15, 20, 25]
    • 출력: 75
  • 설명: 이 프로그램은 배열의 각 요소를 순회하며 합을 계산한다.

내 풀이

const numbers = [5, 10, 15, 20, 25];
let results = 0;
for (const number of numbers) {
  results3 += number;
}
console.log(results);

4. 문자열 뒤집기

  • 문제: 주어진 문자열을 뒤집어서 출력하는 프로그램을 작성하시오.
  • 입력: str (문자열, 예: "Hello, World!")
  • 출력: 뒤집힌 문자열.
  • 예시:
    • 입력: "Hello, World!"
    • 출력: "!dlroW ,olleH"
  • 설명: 문자열을 끝에서부터 시작하여 차례로 각 문자를 추가하여 새로운 문자열을 만든다

내 풀이

const str = "Hello, World!";
// 문자열 뒤집기 로직
let reversed = "";
for (let i = str.length - 1; i >= 0; i--) {
  reversed += str[i];
}
console.log("뒤집힌 문자열:", reversed);

강사님 풀이

//while ver
const str = "Hello";
let reversed = "";
let index = str.length - 1;
while (index >= 0) {
  reversed += str[index];
  index--;
}
console.log(reversed);

while문으로 쓸 때는 index를 따로 지정해 줘야 된다

5. 특정 숫자까지의 곱 계산

5! → 5 4 3 2 1

4! → 4 3 2 * 1

2! ⇒ 2 * 1

1! → 1

0! → 1

  • 문제: 주어진 정수 N의 팩토리얼을 계산하는 프로그램을 작성하시오.
  • 입력: N (정수, 1 이상)
  • 출력: N의 팩토리얼.
  • 예시:
    • 입력: 5
    • 출력: 120
  • 설명: 팩토리얼은 1부터 N까지의 모든 정수를 곱한 결과이다. 이 프로그램은 N까지 반복하여 곱을 계산한다.

내 풀이

let n = 5;
let factorial = 1;
for (let i = 1; i <= n; i++) {
  factorial *= i;
}
console.log(`${n}의 팩토리얼:`, factorial); // 출력 120

6. 암스트롱수

  • 문제: 100부터 999까지의 세 자리 정수 중 암스트롱 수를 구해서 출력하세요.
  • 입력: 없음
  • 출력: 153, 370, 371, 407
  • 예시:
    • 입력: 없음

    • 출력

      153
      370
      371
      407

내 풀이

for (let i = 100; i <= 999; i++) {
 let numbers = String(i);
 let sum = 0;
 for (const number of numbers) {
   sum += number ** 3;
 }
 if (sum === i) {
   console.log(i);
 }
};

강사님 풀이

for (let i = 1; i < 10; i++) {
  for (let j = 0; j < 10; j++) {
    for (let k = 0; k < 10; k++) {
      const sum = i * i * i + j * j * j + k * k * k;
      const original = i * 100 + j * 10 + k;
      if (sum === original) {
        console.log(original);
      }
    }
  }
}
for (let i = 100; i < 1000; i++) {
  const one = i % 10; // 일의 자리 -> 9
  const ten = ((i - one) / 10) % 10; // 129 -> 2
  const hundred = (i - one - ten * 10) / 100; // 100 -> 1 777 -> 700/ 7= 7
  if (one * one * one + ten * ten * ten + hundred * hundred * hundred === i) {
    console.log(i);
  }
}

각 자리수라는 말 보고 문자열로 바꿔서 반복문 돌려야겠다! 생각했지만 좀 더 수학적(?)으로 푸는 연습을 해야겠다

💬 마치며

연습문제를 풀어보면 어떻게 풀어야 되는지는 알겠지만 코드로 바꾸는 게 어려운 것 같다. 프로그래밍적 사고라는 게 부족한 걸까… 와중에 암스트롱수는 이전에도 풀어본 적이 있는데 바로 안 풀어졌다(나 진짜 바본가...)
이것도 여러 유형을 접해보면 나아질 것 같아서 코테를 꾸준히 풀어보려 한다 강사님 풀이 보면서 못풀었던 문제들 다시한번 풀어봐야지 😮‍💨

profile
프론트엔드 공부 기록 아카이빙🍁

0개의 댓글