22.9.27

커피 내리는 그냥 사람·2022년 9월 27일
0

항해99

목록 보기
17/108

알고리즘 모의고사 정리

1. 자연수 뒤집어서 더하기(하)

30분 소요

function solution(n){
  let result = ""
  let tempArr = Array.from(String(n), Number).reverse()
  // 임시 array 만들어 입력받은 n을 items로 만들어준 뒤 reverse로 뒤집는다.
  let sum = tempArr.reduce((a, b) => a + b, 0)
  // tempArr의 items값의 합은 reduce를 통해 구해준다.
  for (let i = 0; i < tempArr.length; i++){
    //이후 글자를 꾸미기 위해 요소 별 for 반복문을 돌려준다.
    if(i === tempArr.length-1){
      //마지막 글자는 이퀄 기호(=)를 붙여줘야 하기 때문에 오른쪽에 sum 값과 붙여준다.
    result += tempArr[i] + "=" + sum
    }else{
     result += tempArr[i] + "+"
     //이후 아닌 나머지 값들은 +를 오른쪽에 붙여준다.
    }
  }
  result = '"' + result + '"'
  // 마지막으로 ""(쌍따옴표)가 같이 나오므로 저장해준다.
  return result
}

2. 몇 시간 했더라? (중)

30분 소요

function solution(arr1, arr2){
  let answer = 0;

  for(let i=0; i<arr1.length; i++){
    // for 반복문으로 먼저 items 해체 확인
    if(arr2[i] > 29){
      // 새벽 5시가 넘으면(24 + 5)
      arr2[i] = 21
      // 21시 체크아웃으로 초기화
    }
    answer += arr2[i] - arr1[i];
    // 빼기로 확인
  }
  return answer;
}

let arr1 = [9,9,9,9,7,9,8]
let arr2 = [23,23,30,28,30,23,23]
console.log(solution(arr1, arr2))

3. 소수의 개수와 덧셈 (상)

3시간 소요

function solution(s) {
  let answer = "";
  let tempArr = s.split(" ").map(Number)
  // 띄어쓰기를 빼며 문자로 치환 후 다시 숫자로 매핑해서 array로 만든다.
  primeArr = tempArr.filter((number) => {
    // 필터를 통해 걸러주고, Math.sqrt로 소수인지 아닌지 판별해준다.
    for (var i = 2; i <= Math.sqrt(number); i++) {
      if (number % i === 0) return false;
      // 소수가 아니면 false, 소수면 true 새로운 primeArr로 복사해준다.
    }
    return true;
  });
  let maxPrimeNumber = Math.max.apply(Math, primeArr);
  console.log(maxPrimeNumber)
  // 가장 큰 소수를 구한다. 그러면 큰 값만 나온다.

  notPrimeArr = tempArr.filter((number) => {
    // 정확히 반대과정이다. 이번엔 소수가 아닌 것을 구한다.
    for (var i = 2; i <= Math.sqrt(number); i++) {
      if (number % i === 0) return true;
    }
    return false;
  });
  let minNotPrimeNumber = Math.min.apply(Math, notPrimeArr);
  console.log(minNotPrimeNumber)
  // 소수가 아닌 것의 새로운 array가 나오면 작은 값을 반대로 구해준다. 이 때 array 이름 헷갈리지 않게 주의하자.

  temp = []
  temp.push(maxPrimeNumber, minNotPrimeNumber)
  // 임의의 array 만들어줘서 최대값, 최소값을 넣은 뒤
  console.log(temp)
  answer = temp.join(" ");
  // 조인으로 글자화 시켜주고
  answer = '"' + answer + '"'
  // 인쇄가 "97 75" 이렇게 되도록 바꿔준다.

  return answer;
}

let s = "97 75 88 99 95 92 73"

console.log(solution(s))

실제론 하 단계를 풀고 제출하긴 했으나 나머지도 다 풀어봤다. 맞는지는 모르겠으나 여하튼 정리해본다.

profile
커피 내리고 향 맡는거 좋아해요. 이것 저것 공부합니다.

0개의 댓글