-
[C++] 백준 10610 - 30(문자열)알고리즘 문제풀이/백준 2022. 4. 23. 01:23반응형
문제 링크
https://www.acmicpc.net/problem/10610
10610번: 30
어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한
www.acmicpc.net
알고리즘
문자열 형태로 받은 수를 먼저 내림차순으로 정리를 해버리고
30의 배수가 되는지 안되는지 판별 후에 전자의 경우 그대로 출력하고 후자의 경우 -1을 출력한다.
30의 배수 판별법
1. 0으로 끝나야 한다.
2. 각 자리 숫자의 합이 3의 배수여야 한다.예전에 수학 문제 풀 때 써먹던 기억이 어렴풋이 나면서 어렵지 않게 떠올릴 수 있었다.
30 배수 판별법만 잘 정리해주면 코드 자체는 어렵지 않게 작성할 수 있다.
코드
#include <iostream> #include <algorithm> using namespace std; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); string N; cin>>N; int res=0; sort(N.begin(),N.end(),greater<char>()); if(N[N.size()-1]!='0') cout<<-1<<'\n'; else{ for(auto i:N){ res+=i-'0'; } if(res%3==0) cout<<N<<'\n'; else cout<<-1<<'\n'; } return 0; }
sort() 함수 마지막에 greater <타입>()을 추가해주면 내림차순으로 정렬할 수 있다.
반응형'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[C++] 백준 2193 - 이친수 (DP) (0) 2022.05.05 [C++] 백준 11726 - 2xn 타일링 (DP) (0) 2022.05.03 [C++] 백준 5052 - 전화번호 목록(문자열) (0) 2022.05.02 [C++] 백준 9935 - 문자열 폭발(문자열) (0) 2022.04.30 [C++] 백준 11656 - 접미사배열(문자열) (0) 2022.04.25