Level 1) 문자열을 정수로 바꾸기, 정수 내림차순으로 배치하기, 하샤드 수, 나머지가 1이 되는 수 찾기

Doozuu·2023년 2월 3일
0

프로그래머스 (JS)

목록 보기
39/183

📌 문제 1. 문자열을 정수로 바꾸기

문제 설명

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

제한 조건

s의 길이는 1 이상 5이하입니다.
s의 맨앞에는 부호(+, -)가 올 수 있습니다.
s는 부호와 숫자로만 이루어져있습니다.
s는 "0"으로 시작하지 않습니다.
입출력 예
예를들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다.
str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.

풀이

Number() 메서드 사용.(parseInt()를 써도 된다.)

function solution(s) {
    return Number(s);
}

문자를 숫자로 바꾸는 다른 방법

문자열과 숫자열의 사칙연산은 숫자가 된다는 성질을 이용한 풀이

function solution(s) {
    return s/1;
}




📌 문제 2. 정수 내림차순으로 배치하기

문제 설명

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

제한 조건

n은 1이상 8000000000 이하인 자연수입니다.

풀이

문자열로 만들어서 배열에 넣고 정렬해서 뒤집은 후 숫자로 바꾸기

function solution(n) {
    return (""+n).split('').sort().reverse().join('')/1
}




📌 문제 3. 하샤드 수

문제 설명

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

제한 조건

x는 1 이상, 10000 이하인 정수입니다.

입출력 예

arr	return
10	true
12	true
11	false
13	false

풀이

메서드를 이용해 각 자릿수의 합을 구해서 나누어 떨어지는지 체크했다.

function solution(x) {
    let add_digit = (x+"").split('').reduce((acc,cur) => acc + Number(cur),0);
    return x % add_digit ? false : true;
}

보완

숫자로 바꿀 때 Number() 대신 연산자를 이용할 수 있고, 삼항연산자 대신 !를 이용해 나머지가 0이 되면(나누어 떨어지면) !0인 true로, 나머지가 1이 되면 !1인 false로 바꾸어 결과를 구할 수 있다.

function Harshad(n){
  return !(n % (n + "").split("").reduce((a, b) => +b + +a ));
}

숫자로 푸는 방식

실행 속도는 이 방식이 더 빠르다.

function solution(x) {
    let num = x;
    let sum = 0;
    do {
        sum += x%10;
        x = Math.floor(x/10);
    } while (x>0);

    return !(num%sum);
}




📌 문제 4. 나머지가 1이 되는 수 찾기

문제 설명

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

제한사항

3 ≤ n ≤ 1,000,000

풀이

2부터 n-1까지 순서대로 나누며 나머지가 1이 되면 break

function solution(n) {
    let answer = 0;
    for(let i=2;i<n;i++){
        if(n%i === 1){
            answer = i; 
            break;
        }
    }
    return answer;
}

break 하지 않고 바로 return 해도 된다!

function solution(n) {
    for(let i=2;i<n;i++){
        if(n%i === 1){
            return i; 
        }
    }
}
profile
모든게 새롭고 재밌는 프론트엔드 새싹

0개의 댓글