TIL. 알고리즘 문제풀이

seul_velog·2022년 4월 19일
0

TIL_algorithm

목록 보기
4/26

1. 세 수 중 최솟값

문제 설명

100이하의 자연수 A, B, C를 입력받아 세 수 중 가장 작은 값을 출력하는 프로그램 작성하기. (정렬 사용X)

▣ 입력설명

첫 번째 줄에 100이하의 세 자연수가 입력된다.

▣ 출력설명

첫 번째 줄에 가장 작은 수를 출력한다.

입출력 예

inputoutput
6, 5, 115
1, 3, 7, 21

풀이

   const findMin = (a, b, c) => {
        let answer = Math.min(a, b, c);
        return answer;
      };

      console.log(findMin(6, 5, 11));

✍️ Math.min 내장객체의 메서드를 이용한다.


solution

function solution(a, b, c) {
        let answer;

        if (a < b) answer = a;
        else answer = b;
        if (c < answer) answer = c;
        return answer;
      }
      console.log(solution(6, 5, 11));

✍️ if 문을 사용한다.






2. 삼각형 판별하기

문제 설명

길이가 서로 다른 A, B, C 세 개의 막대 길이가 주어지면 이 세 막대로 삼각형을 만들 수 있 으면 “YES"를 출력하고, 만들 수 없으면 ”NO"를 출력한다.

▣ 입력설명

첫 번째 줄에 100이하의 서로 다른 A, B, C 막대의 길이가 주어진다.

▣ 출력설명

첫 번째 줄에 “YES", "NO"를 출력한다.

입출력 예

inputoutput
6 7 11YES
13 33 17NO

풀이

  const triangles = (a, b, c) => {
        const sorted = [a, b, c].sort((a, b) => a - b);
        let answer;

        if (sorted[0] + sorted[1] > sorted[2]) answer = 'YES';
        else answer = 'NO';
        return answer;
      };
      console.log(triangles(6, 7, 11));

✍️

  • 삼각형의 제일 긴 변의 길이가 다른 두 변의 길이의 합보다는 작아야 성립한다는 조건을 만족시킨다.
  • sort 를 이용해서 받은 변의 길이를 작은 순서부터 정렬한 뒤 비교했다.😀

solution

function solution(a, b, c) {
        let answer = 'YES', max;
        let sum = a + b + c;
        if (a > b) max = a;
        else max = b;
        if (c > max) max = c;

        if (sum - max <= max) answer = 'NO';
        return answer;
      }
      console.log(solution(13, 33, 17));

✍️

  • 먼저 삼각형의 변의 길이의 총합을 구한다.
  • max 변수를 만들고 가장 긴 변의길이를 담은 후 총합과 비교한 풀이이다.
  • 2행처럼 변수를 여러 개 만들때 한 줄에 담아서 표현할 수도 있겠다.






3. 가위바위보

문제 설명

A, B 두 사람이 가위바위보 게임을 한다. 총 N번의 게임을 하여 A가 이기면 A를 출력하고, B가 이기면 B를 출력한다. 비길 경우에는 D를 출력한다.
가위, 바위, 보의 정보는 1: 가위, 2: 바위, 3: 보 이다.

입출력 예

inputoutput
5, [2, 3, 3, 1, 3], [1, 1, 2, 2, 3]A B A B D
6, [1, 2, 1, 3, 2, 2], [3, 2, 2, 2, 1, 3]A D B A A B

풀이

      const rockPaperScissors = (num, a, b) => {
        let result = [];
        for (let i = 0; i < num; i++) {
          if (a[i] === b[i]) {
            result.push('D');
          } else if (a[i] === 1 && b[i] === 3) {
            result.push('A');
          } else if (a[i] === 2 && b[i] === 1) {
            result.push('A');
          } else if (a[i] === 3 && b[i] === 2) {
            result.push('A');
          } else {
            result.push('B');
          }
        }
        return result.join(' ');
      };

      const num = 5;
      const a = [2, 3, 3, 1, 3];
      const b = [1, 1, 2, 2, 3];
      console.log(rockPaperScissors(num, a, b));

✍️

  • if else if else 문을 활용해서 a를 기준으로 답을 구할 수 있다.
  • 나는 빈 배열을 이용해서 push , join 을 활용해서 구했다.
  • solution을 보니 단순하게 빈 문자열로 설정할 수도 있었다.😀
    // ex.) 
    let answer = '';
    if(a[i]===b[i]) answer += 'D' + ' ';
    else if(a[i]===1 && b[i]===3) answer += 'A' + ' ';
    ...
    return answer;




자바스크립트 알고리즘 문제풀이

profile
기억보단 기록을 ✨

0개의 댓글