알고리즘 - 모의고사

이한결·2023년 1월 31일
0

부트 캠프

목록 보기
34/98
post-thumbnail

1월 31일 여정 23일차이다.

오늘은 내가 풀은 알고리즘 모의고사에 대해 코드 리뷰를 하고자 한다.

오늘의 Today I Learned

1번 문제

문제는 항해 1일 차 날짜를 입력하면 98일 이후 이후 항해를 수료하게 되는 날짜를 계산해주는 알고리즘을 만든는 것이다.

 function solution(a, b) {
                let dateStr = '2016-' + a + '-' + b;
                let date = new Date(dateStr);
                let after = date.setDate(date.getDate() + 98);
                let graduate = new Date(after);
                return graduate.getMonth() + 1 + '월' + graduate.getDate() + '일';
            }
            solution(1, 18);

코드 리뷰

  1. 날짜의 형식을 String으로 바꾸어 주었다.

  2. new Date()라는 것을 이용하여 날짜로 바꾸어주었다.

  3. setDate()를 이용하여 일자에 98일을 더하였다.

  4. 밀리세컨드로 반환 된 것을 다시 날짜 형식으로 변환하였다.

3번 문제

문자열 s에 공백으로 구분된 숫자들이 저장되어있다. str에 나타나는 숫자 중 소수의 최대값과
소수가 아닌 최소값을 찾아 이를 '(최소값)(최대값)'형태로 반환해준다.

예를 들어서 '2 3 4 5'이면 '4 5'가 반환된다.

 function solution(num) {
                let arr = num.split(' ');

                let prime = [];
                let notPrime = [];

                const isPrime = (n) => {
                    for (let i = 2; i < n; i++) {
                        if (n % i === 0) {
                            return false;
                        }
                    }
                    return true;
                };

                arr.forEach((a) => {
                    if (isPrime(a)) prime.push(a);
                    else notPrime.push(a);
                });

                prime.sort((a, b) => b - a);
                notPrime.sort((b, a) => a - b);

                return `${notPrime[0] ? notPrime[0] : ''} ${prime[0] ? prime[0] : ''}`;
            }
            console.log(solution('2 3 4 5'));
  1. num을 공백 기준으로 쪼갠다.

  2. 소수가 아닌 배열, 소수만 들어가는 배열 2개를 만든다.

  3. forEach를 사용하여 소수를 판별함수(isPrime())하여 각 배열에 넣는다.

  4. sort로 오름차순, 내림차순으로 정렬한다.

  5. 배열 2개의 0번째 값을 문자열로 반환한다.

profile
평범한 삶을 위하여

0개의 댓글