코딩테스트

[프로그래머스] 하샤드 수, 정수 제곱근 판별

코딩너구리 2024. 4. 1. 14:29

하샤드 수

https://school.programmers.co.kr/learn/courses/30/lessons/12947

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

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

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

 

자릿수를 구하는 법을 알면 쉽게 풀 수 있는 문제다.

 

#include <string>
#include <vector>

using namespace std;

bool solution(int x) {
    
    int sum=0;
    int divide=x;
    
    while(divide!=0)
    {
        sum+=divide%10;
        divide/=10;
    }
    
    if(x%sum==0)
    {
        return true;
    }
    else
    {
        return false;
    }
    
}

정수 제곱근 판별

https://school.programmers.co.kr/learn/courses/30/lessons/12934

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

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

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

 

간단하게 생각했을때 1부터 제곱을 해서 n의 값과 같다면 x의 값을 알아낼 수 있도록 하는게 괜찮을 거라 판단했다.

 

#include <string>
#include <vector>
#include <cmath>

using namespace std;

long long solution(long long n) {
    
    long long sum = 0;
    
    for(int i = 1;i<10000000;i++)
    {
        sum = pow(i,2);
        
        if(sum == n)
        {
            return pow(i+1,2);
        }
        
        if(sum>n)
        {
            return -1;
        }
    }
    
    return -1;
    
}

pow()함수를 이용해 제곱값을 구하고, for문을 통해 게속 값을 더해줘 찾을 수 있도록 한다. 다만 무의미한 탐색을 줄이기 위해 sum의 값이 n보다 높아진다면 제곱근이 없는것으로 판단하고 return을 시켜준다.

 

 

출처 : 프로그래머스 lv1