티스토리 뷰
반응형
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
int main() {
int length, n, digit,sum=0;
//length는 몇자리 수 인지, n은 사용자로부터 입력받을 수
//digit은 각 자릿수
//sum은 자기자신과 각자릿수를 더한 값
string str; //문자열로 받아줌 그 이유는 몇자리 수인지 알기 위해
cin >> str;
length = str.length(); //length에 몇자리 수인지 할당
n = stoi(str); //int로 바꿔 n에다 다시 저장
int result = n; //result초기값을 n으로 할당후
//반복문을 돌아도 그대로 n이면 생성자가 없다고 판단
//(n / 10 ^ (k - 1)) % 10 //핵심적 코드 각 자릿수 추출
for (int i = n - 1; n-9*length <= i; i--) { //반복문은 n-1~ n-9*length
// n-1 ~1까지 돌면 너무 비효율적이니까
// 대충 끝내는 구간을 임의로 정함
sum = 0;
for (int k = length; k >= 1; k--) {
digit = (i / (int)pow(10, k - 1))%10; //각자릿수 추출해
sum += digit; //sum에 더해줌
}
sum += i; //자기자신 더함
if (sum == n) { //sum과 n이 같다면 생성자임
if (i < result) //그리고 최솟값을 찾는것이므로 현재 result값보다 i가 작으면
result = i; //최신화해줌
}
}
if (n == result) { //n==result인 경우는 생성자가 없는경우
cout << "0"<<endl;
return 0;
}
else { //그외에는 result값이 최소생성자
cout << result << endl;
}
return 0;
}
숫자 n이 있을때 k번째 자릿수의 숫자를 추출하는 코드
(k는 1의자리, 10의자리, 100의자리 등..에따라 1,2,3...식으로 증가한다)
(n/10^(k-1))%10
c++ math.h라이브러리를 사용하면
(n/(int)pow(10,k-1))%10
그동안 이거를 모르고 일일히 일의자리, 십의자리, 백의자리마다 다르게 코드를짰다
그런데 7자리수까지 가버리니까 너무 힘들어서
검색해본 결과 이런 좋은 코드가 있었다
반응형
'코딩 테스트 > 백준' 카테고리의 다른 글
백준 10989 counting sort c++ (0) | 2022.01.19 |
---|---|
백준 2751번 merge sort c++ (0) | 2022.01.18 |
백준 1018 c++ (0) | 2022.01.13 |
에라토스테네스의 체(백준 1929 c++) (0) | 2022.01.06 |
백준 1712번 c++ (0) | 2021.12.27 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- bfs
- 2024인프콘
- git 예전 커밋 수정
- oauth
- 인프콘2024
- 프로그래머스
- authorization_code
- 우분투
- DML
- 데이터 3법
- SQL
- kloa
- 로스트아크 캐릭터
- 클로아
- 데이터3법
- authorization code
- SpringBoot
- infcon 2024
- git commit 수정
- CSS
- git
- oauth2.0
- Android Studio
- DDL
- html #웹 #웹사이트 #플레이리스트
- html
- 데이터베이스
- 오픈소스
- 리눅스
- javascript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함