기초 알고리즘 문제 풀이

eggMun·2023년 1월 15일
0

오늘은 주말이라서 밀린 과제와 남은 시간에 알고리즘 문제를 풀었다.

첫 번째 문제 - 세 수 중 최솟값 구하기

100 이하의 숫자의 세 수 중 최솟값을 구하는 문제이다.
또 정렬을 사용하면 안된다고 한다.

function helloWord(a, b, c) {
  if (a < b && a < c) {
    return a;
  } else if (b < c) {
    return b;
  } else {
    return c;
  }
}

helloWord(6, 5, 11);
  1. 만약 a가 제일 작을 경우
  2. a를 반환한다.
  3. 만약 b가 제일 작을 경우
  4. b를 반환한다.
  5. 그게 아니라면
  6. c를 반환한다.
    이렇게 풀이를 하였다.
    하지만 이거 보다 더 좋은 방법으로 한줄을 줄일 수 있다.
function helloWord(a, b, c) {
 let sum;
  if (a<b) sum = a;
  else sum = b
  if(c<sum) sum = c;
  return sum;
helloWord(6, 5, 11);

이렇게 한줄을 더 줄일 수 있다.
1. 만약 a가 b보다 작다면 sum은 a이다.
2. 그게 아니라면 sum은 b이다.
3. 만약 c가 sum보다 작다면 sum은 c이다.

삼각형의 조건

삼각형이 만들어 질 수 있는지 구하는 문제이다.
삼각형이 되려면 가장 긴 변의 길이와 나머지 두 변의 합이 가장 긴 변의 길이보다 커야 한다.

function helloWord(a, b, c) {
  let answer = "NO";
  if (a > b && a > c) {
    if (a < b + c) answer = "YES";
  } else if (b > a && b > c) {
    if (b < a + c) answer = "YES";
  } else {
    if (c < a + b) answer = "YES";
  }
  return answer;
}
  1. 미리 answer에 NO를 할당한다.
  2. 만약 a가 제일 클 경우
  3. 만약 a가 b+c 보다 작다면
  4. answer은 YES가 할당된다.
  5. 그게 아니라면 answer은 그대로 NO이다.
    이렇게 반복해서 3줄을 적었다.

연필 문제

사람 1명당 연필 한자루를 나누어 줄 떄 필요한 연필의 다스 수를 구하는 문제이다.

function helloWord(num) {
  return Math.ceil(num / 12);
}
helloWord(37);

Math.ceil 라는 메소드를 이용하여 num을 나누었을 때 소수점이 나오면 올림하게 하였다.
그래서 37/12을 나누면 리턴 값은 4가 된다.

1부터 N까지 합 구하기

기초 알고리즘 문제에 자주 보이는 문제이다.
특히 반복문을 사용한 기초 문제이다.

function helloWord(sum) {
  let result = 0;
  for (let i = 1; i <= sum; i++) {
    result += i;
  }
  return result;
}
  1. i는 1터 시작하여 sum이랑 같거나 작을때까지 i는 1씩 증가한다.
  2. result 는 result + i를 더한다. ( 반복할 수록 i는 1씩 증가)
  3. 2번은 i가 sum이랑 같거나 작을때까지 반복한다.
    이러면 1~N까지의 수의 합을 구할 수 있다.

7개의 수 중 최솟값 구하기

function helloWord(a, b, c, d, e, f, g) {
  const sum = [a, b, c, d, e, f, g];
  let num = sum[0];
  for (let i = 0; i < sum.length; i++) {
    if (num > sum[i]) num = sum[i];
  }
  return num;
}
  1. 미리 7개의 수를 sum이라는 배열에 할당한다.
  2. 그리고 num은 sum[0] 숫자를 할당한다.
    왜나하면 num[0]은 배열이 있다면 항상 있는 인덱스니 그렇다.
  3. 반복문을 돌려준다. sum의 길이만큼
  4. 만약 num이 > num[i]보다 작다면
  5. num은 sum[i]가 할당된다.
    4번 5번의 해석은 만약 5 > 3이라면 3이 작기 때문에 3의 값이 할당되는 것이다.

7개의 수 중 홀수값을 구하고 그 중에서 최솟값 구하기

function helloWord(a, b, c, d, e, f, g) {
  const sum = [a, b, c, d, e, f, g];
  let hot = 0;
  let num = Number.MAX_SAFE_INTEGER;

  for (let i = 0; i < sum.length; i++) {
    if (sum[i] % 2 !== 0) {
      hot += sum[i];
      if (num > sum[i]) num = sum[i];
    }
  }
  console.log(hot, num);
}

위에 문제에서의 응용문제이다.
거기서 홀수값을 구해놓고 최솟값을 구하면 되는 것이다.
1. 이번에는 num에 Number.MAX_SAFE_INTEGER 메소드를 사용하였다.
이 메소드는 자바스크립트에서 안전한 숫자 중에서 제일 큰 값을 구해주는 메소드이다.
2. 똑같이 sum에 배열을 만들어서 대입값들을 할당 시킨다.
3. 그리고 hot에는 0을 할당한다.
4. 그리고 반복문을 이용하여 sum의 길이만큼 돌린다.
5. 만약 sum[i] % 2 !== 0 이 아니면
6. hot는 hot + sum[i]를 한다.
7. 5번에서 2를 나눠서 나머지가 0이 아니면 홀수 이다.
8. 그 다음 if문은 위에 문제랑 비슷하기 때문에 생략하겠다.

profile
블로그 이전: https://medium.com/@eggmun98

0개의 댓글