221121 항해99 15일차 알고리즘 문제풀이

요니링 컴터 공부즁·2022년 11월 22일
0
  1. 문자열 내림차순으로 배치하기
function solution(s) {
      s = s.split('')

      let upper = []
      let lower = []
      
      for (let i = 0; i < s.length; i++) {
        if (s[i] === s[i].toUpperCase()) {
          upper.push(s[i])
        } else {
          lower.push(s[i])
        }
      }

      lower = lower.sort().reverse().join('')
      upper = upper.sort().reverse().join('')

      return lower + upper;
    }

모범답안
: "In ASCII, lowercase letters are greater than all uppercase letters"
: 아하 소문자는 원래 대문자보다 큰 것으로 간주되기 때문에 굳이 따로 안돌려도 됨. 이래서 이론을 알면 코드가 짧아지는구나!!!

function solution(s) {
  return s
    .split("")
    .sort()
    .reverse()
    .join("");
}
  1. 소수 만들기

내 답안
: 오,, 함수 안에 함수를 또 만들 수 있나 생각해봤는데 생각해보니 굳이 solution 함수 안에만 만들 필요는 없다! 어차피 값은 solution에만 넘어오기 때문에,, 좀 느린 것 같긴 함
: 문제를 제대로 이해 못해서 시간을 날렸다 ㅎ
: 대박 모범 답안이랑 똑같은 방법이넹 이게 최선인가 ㅇㅅㅇ,,

    function solution(nums) {
      nums.sort((a, b) => a - b)
      let count = 0
      for (let i = 0; i < nums.length - 2; i++) {
        for (let j = i + 1; j < nums.length - 1; j++) {
          for (let k = j + 1; k < nums.length; k++) {
            let q = nums[i] + nums[j] + nums[k]
            if (isPrime(q) === true) {
              count++
            }
          }
        }
      }
      return count
    }

    function isPrime(num) {
      for (let i = 2; i < num; i++) {
        if (num % i === 0) {
          return false;
        }
      }
      return true;
    }
  1. 숫자 문자열과 영단어
function solution(s) {
      const index = {
        '0': 'zero',
        '1': 'one',
        '2': 'two',
        '3': 'three',
        '4': 'four',
        '5': 'five',
        '6': 'six',
        '7': 'seven',
        '8': 'eight',
        '9': 'nine'}

      Object.keys(index).forEach((key) => {
        s = s.replaceAll(index[key], key)
      })

      return Number(s);
    }
  1. 시저 암호

내 답안
: 아스키 코드를 알면 좋을텐데,, 아스키 코드를 몰라서 그냥,, ㅎㅎ; 공부하쟈 !;;

    function solution(s, n) {
      let lower = 'abcdefghijklmnopqrstuvwxyz'
      let upper = lower.toUpperCase()
      lower = lower.split('')
      upper = upper.split('')

      s = s.split('')

      for (let i = 0; i < s.length; i++) {
        if (lower.indexOf(s[i]) !== -1) {
          if (lower.indexOf(s[i]) + n + 1 > lower.length) {
            s[i] = lower[lower.indexOf(s[i]) + n - lower.length]
          } else {
            s[i] = lower[lower.indexOf(s[i]) + n]
          }
        } else if (upper.indexOf(s[i]) !== -1) {
          if (upper.indexOf(s[i]) + n + 1 > upper.length) {
            s[i] = upper[upper.indexOf(s[i]) + n - upper.length]
          } else {
            s[i] = upper[upper.indexOf(s[i]) + n]
          }
        } else if (s[i] === ' ') {
          continue
        }
      }
      return s.join('')
    }

0개의 댓글