[20230213_프로그래머스 알고리즘_Lv.1]

YunTrollpark·2023년 2월 13일
1

1. 정수 제곱근 판별

문제 설명

임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

제한 사항
n은 1이상, 50000000000000 이하인 양의 정수입니다.

function solution(n) {
  const root = Math.sqrt(n)
  if(Number.isInteger(root) === true){
    return Math.pow((root + 1), 2)
  } else {
    return -1 
  }
}

// 해설
// 1. Math.sqrt(x) -> 루트
// 2. Number.isInteger(value) -> 정수인지 아닌지
// 3. Math.pow(base, exponent) -> 제곱근
// base는 밑 값, exponent는 밑 을 제곱하기 위해 사용하는 지수.

2. x만큼 간격이 있는 n개의 숫자

문제 설명

함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.

제한 조건
x는 -10000000 이상, 10000000 이하인 정수입니다.
n은 1000 이하인 자연수입니다.

function solution(x, n) {
  let a = []
for(let i = 1; i <= n; i++){
  a.push(x*(i))
}
  return a
}
// 해설
// 1. 빈배열 하나 생성
// 2. 반복문을 돌면서 x에 n의 수 만큼 곱해주면서 빈배열에 넣어줌!
// 해설 중에 넘 신박해서 가져옴!
function solution(x, n) {
    return Array(n).fill(x).map((v, i) => (i + 1) * v)
}
// Array.prototype.fill()
// 배열의 시작 인덱스부터 끝 인덱스의 이전까지 정적인 값 하나로 채움
// arr.fill(value[, start[, end]])
// vlaue: 배열을 채울 값.
// start: 시작 인덱스, 기본 값은 0.(optional)
// end: 끝 인덱스, 기본 값은 this.length.(optional)

3. 문자열을 정수로 바꾸기

문제 설명

문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.

제한 조건
• s의 길이는 1 이상 5이하입니다.
• s의 맨앞에는 부호(+, -)가 올 수 있습니다.
• s는 부호와 숫자로만 이루어져있습니다.
• s는 "0"으로 시작하지 않습니다.

function solution(s) {
return Number(s)
}
// 해설
// Number 메서드에 문자열을 넣어서 변환!

4. 정수 내림차순으로 배치하기

문제 설명

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

제한 조건
• n은 1이상 8000000000 이하인 자연수입니다.

function solution(n) {
const answer = [...n+''].map((el)=>(Number(el))).sort((a,b) => b-a).join('')
return parseInt(answer)
}
// 해설
// 1. 먼저 스프레드 연산자를 활용해서 숫자를 문자열의 배열로 변환
// 2. 반목문을 돌면서 각 문자를 숫자로 변환
// 3. sort로 내림차순으로 정리 후 배열을 join으로 하나의 문자열로 변환
// 4. 마지막에 parseInt 숫자로 변환!

5. 나머지가 1이 되는 수 찾기

문제 설명

자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.

제한 조건
• 3 ≤ n ≤ 1,000,000

function solution(n) {
return Array.from({length: n}, (v, i) => i).filter((item)=> n % item === 1)[0]
}
// 해설
// 1. 먼저 n의 길이 만큼의 배열 생성
// 2. filter 함수를 활용해서 나머지 1인 정수를 반환
// 3. 그러면 오름차순으로 정렬 되는데 그 중에 0번째 index를 return
// 다른분이 쓴 코드 중 인상 깊어서 가져옴...!!!
// while문도 증감 가능!!!
function solution(n, x = 1) {    
    while (x++) {
        if (n % x === 1) {
            return x;
        }
    }    
}

6. 하샤드 수

문제 설명

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

제한 조건
• x는 1 이상, 10000 이하인 정수입니다.

function solution(n) {
const a = [...x + ''].map((item)=> Number(item)).reduce((a,b) => a + b)
return x % a === 0 
}
// 해설
// 1. 먼저 n을 분리하여 하나의 문자열로 변경 후 배열에 넣어줌
// 2. 반복문을 돌면서 숫자로 변경 후 reduce를 써서 더하기
// 3. 그렇게 나온 숫자를 x 로 나눠서 true인지 false인지 반환!

오늘도 힌트 안보고 머리 쥐어짜서 해결했다... 오늘은 1시간 좀 넘게 6문제나 풀었다! 2번 문제가 오늘 젤 골치 아팠당

profile
코딩으로 세상에 이야기하는 개발자

0개의 댓글