일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- C언어
- 브루트포스알고리즘
- 자료구조
- 그리디알고리즘
- Image Classification
- 소수판정
- 수학
- C
- 백준
- 정렬
- 정수론
- 프로그래머스
- 다이나믹프로그래밍
- 사칙연산
- 프로그래머스연습문제
- 프로그래머스sql
- 문자열
- C++
- 백준알고리즘
- 그리디
- 구현
- 논문구현
- 논문리뷰
- 해시를사용한집합과맵
- 프로그래머스코딩테스트
- SQL
- MySQL
- 이분탐색
- 큐
- 이진탐색
- Today
- Total
초보 개발자의 이야기, 릿허브
[C++] 프로그래머스 하샤드 수 본문
1. 문제이해
코딩테스트 연습 - 하샤드 수 | 프로그래머스 (programmers.co.kr)
어떤 숫자 X의 각 자릿수를 모두 더한 합으로 X를 나누었을 때, 나누어떨어지면 그 수를 하샤드 수라고 한다.
양의 정수 X를 입력받아 X가 하샤드 수인지를 확인하는 알고리즘을 구현하는 것이 목표이다.
2. 문제풀이
바로 전 포스팅에서 풀었던 자릿수 더하기 문제에서 조건이 조금 추가된 문제이다.
X의 자릿수의 합을 더한 뒤, 해당 수가 자릿수의 합으로 나누어떨어지는지까지 확인해야 한다.
X의 자릿수의 합을 구하는 방법은 이전 포스팅과 동일하게 구현했다.
[C++] 프로그래머스 자릿수 더하기 (tistory.com)
위의 방법으로 정수 X의 각 자릿수의 합을 구한 뒤에는, X가 나누어떨어지는지 아닌지만 판단하면 된다.
주어진 틀은 아래와 같다.
3. 소스코드
#include <string>
#include <vector>
using namespace std;
bool solution(int x) {
bool answer = true;
int sum = 0;
// while문을 거치고나면 x값이 바뀌므로, 초기 x값을 따로 저장
int initial_x = x;
// 각 자릿수의 합 구하기
while(x > 0){
sum += x % 10;
x = x / 10;
}
if(initial_x % sum == 0){
answer = true;
}
else
answer = false;
return answer;
}
while문을 통해 각 자릿수의 합을 구한 뒤, if문을 통해 초기 x값이 자릿수의 합으로 나누어지는지를 확인,
나누어지면 true, 아니면 false를 반환하도록 구현했다.
코드에서 한 가지 주의해야 할 점은 바로 while문을 통과하면 x값이 바뀐다는 점인데,
initial_x라는 값을 두어 초기의 x값을 따로 저장해주어 이를 방지했다.
(만약 initial_x 값을 두지않고, if문에서 x % sum 으로 쓰게된다면,
x값은 이미 while문을 통해 바뀐값이 나오기때문에 초기 x값이 아닌 다른 값이 들어가 제대로 된 결과를 반환하지 않게 된다.)
프로그래머스 문제가 오늘째로 4문제인데, 백준과 함께 병행하면서 푸는게 나을 것 같다.
프로그래머스는 주어진 틀에 맞춰서 짜야하는 것 때문에 뭔가 답답하달까..😥
그래도 이렇게 주어진 틀에 맞춰서 짜는 연습도 많이 해봐야지..😌
'코딩테스트 > 📘 프로그래머스 (programmers)' 카테고리의 다른 글
[C++] 프로그래머스 문자열을 정수로 바꾸기 (0) | 2021.08.17 |
---|---|
[C++] 프로그래머스 2016년 (0) | 2021.08.16 |
[C++] 프로그래머스 자릿수 더하기 (0) | 2021.08.13 |
[C] 프로그래머스 두 정수 사이의 합 (0) | 2021.08.12 |
[C++] 프로그래머스 문자열 내 p와 y의 개수 (0) | 2021.08.12 |