코딩테스트
[프로그래머스] 하샤드 수, 정수 제곱근 판별
코딩너구리
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