Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Kafka
- 프로그래밍문제
- Spring Boot
- Elasticsearch
- Spring
- 클라우드
- 쿠버네티스
- 스프링부트
- springboot
- 스프링 부트
- 코드업
- 오일러프로젝트
- 로드밸런서
- 스프링
- aws
- Apache Kafka
- 백트래킹
- Spring Data JPA
- gcp
- 월미도
- Docker
- 카프카
- 알고리즘
- 인천여행
- 자료구조
- 백준
- DFS
- JPA
- VPC
- 클라우드 컴퓨팅
Archives
- Today
- Total
GW LABS
[백준 2231] 분해합 본문
처음 접근할 때에는 모든 분해합을 구하면서 가장 작은 생성자를 구하려고 했다. 이럴 경우 숫자가 커지면 커질수록 생성자를 계산하는 과정이 늘어나게 된다. 해법은 입력으로 들어온 숫자에서 자리수 * 9를 빼주면 범위를 상당히 좁힐 수 있다. 아래는 해당 구현법을 적용한 C++ 소스이다.
#include <iostream>
using namespace std;
int cntPos(int number) {
int cnt = 0;
while (number) {
number /= 10;
cnt++;
}
return cnt;
}
int sumPosNumbers(int number) {
int sum = 0;
while (number) {
sum += number % 10;
number /= 10;
}
return sum;
}
int main() {
int number;
cin >> number;
int originPart = number - (cntPos(number) * 9);
for (int index = originPart; index <= number; index++) {
int testNum = index + sumPosNumbers(index);
if (testNum == number) {
cout << index << endl;
return 0;
}
}
cout << 0 << endl;
return 0;
}
'Algorithm & DataStructure' 카테고리의 다른 글
[오일러 프로젝트 16] 2^1000의 자리수 구하기 (0) | 2020.06.05 |
---|---|
[코드업 4434] 좋은 수열 (0) | 2020.05.24 |
[코드업 3540] 0 만들기 게임 (0) | 2020.05.21 |
[코드업 3506] 블럭 채우기 1 (small) (0) | 2020.05.10 |
시간 복잡도 빠르게 알아내기 (0) | 2019.04.14 |
Comments