221122 항해99 16일차 알고리즘 문제풀이

요니링 컴터 공부즁·2022년 11월 23일
0
  1. 신규 아이디 추천
    function solution(new_id) {
      let id = new_id.toLowerCase()

      id = id.replace(/[^a-z0-9_.-]/g, '').split('')

      let i=0
      for (let j=i+1; j<id.length; j++) {
        if (id[i] === '.' && id[i] === id[j]) {
          id.splice(i,1)
          j--
          continue
        } i++
      }

      if (id[0] === '.') {
        id.splice(0,1)
      } 

      if (id.length === 0) {
        id[0] = 'a'
      }

      if (id.length > 15) {
        id.length = 15
      }
        
      if (id[id.length-1] === '.') {
         id.length = id.length-1
      }

      if (id.length < 3) {
        for (let j=id.length-1; j<3; j++) {
          id[j] = id[id.length-1]
        }
      }

      return id.join('')
    }

모범 답안
: 와,, replace를 연달아서 쓸 생각을 못했네 쩐다!!

function solution(new_id) {
    const answer = new_id
        .toLowerCase() // 1
        .replace(/[^\w-_.]/g, '') // 2
        .replace(/\.+/g, '.') // 3
        .replace(/^\.|\.$/g, '') // 4
        .replace(/^$/, 'a') // 5
        .slice(0, 15).replace(/\.$/, ''); // 6
    const len = answer.length;
    return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len);
}
  1. 약수의 개수와 덧셈
function solution(left, right) {
    let answer = 0
    for (let i=left; i<=right; i++) {
        if (Number.isInteger(Math.sqrt(i)) === true) {
            answer -= i
        } else {
            answer += i
        }
    }
    return answer
}
  1. 약수의 합
function solution(n) {
    let divisors = []
    
    for (let i=1; i<=n; i++) {
        if (n%i === 0) {
            divisors.push(i)
        }
    }
    
    let answer = 0
    
    for (const value of divisors) {
        answer += value
    }

    return answer
}

: 아 굳이 배열 안만들고 바로 answer에 더해주면 되겠구낭,,,

  1. 예산
    function solution(d, budget) {
      d.sort((a, b) => a - b)

      if (d.length === 1) {
          if (d[0] > budget) {
            return 0
          } else {
            return 1
          }
      }

      if (d.reduce((a,b) => a+b,0) < budget) {
        return d.length
      }

      let max = 0
      let i
      for (i = 0; i < d.length; i++) {
        max += d[i]
        if (max >= budget) {
          break
        }
      }

      if (max == budget) {
        return i+1
      } else {
        return i
      }
    }

0개의 댓글