https://www.acmicpc.net/problem/1526
1526번: 가장 큰 금민수
첫째 줄에 N이 주어진다. N은 4보다 크거나 같고 1,000,000보다 작거나 같은 자연수이다.
www.acmicpc.net
문제
은민이는 4와 7을 좋아하고, 나머지 숫자는 싫어한다. 금민수는 어떤 수가 4와 7로만 이루어진 수를 말한다.
N이 주어졌을 때, N보다 작거나 같은 금민수 중 가장 큰 것을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. N은 4보다 크거나 같고 1,000,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 N보다 작거나 같은 금민수 중 가장 큰 것을 출력한다.
예제 입력 1 복사
100
예제 출력 1 복사
77
간단히 설명을 하자면
4, 7, 47, 77, 444, 447, 477 ....
이런식으로
4와 7로만 이루어진 수를 구하는 것이지만
정수 N에서 밑으로 가장 가까운 4와 7로 이루어진 수를 구하는 문제이다.
예를 들어 500을 입력하면
477을 출력하면 되는 문제이다.
#include <iostream>
bool isGuemMinSu(int a) { // bool형으로 함수 생성
bool result = true; // 리턴할 bool형의 변수를 선언 후 true로 초기화
while(a) { // a가 0이면 프로그램 종료
if(!(a % 10 == 4 || a % 10 == 7)) { // a 나누기 10의 나머지가 4 혹은 7이 아닐 때
result = false;
break; // while문을 종료한다
}
a /= 10; // a가 112라면 2를 없애고 11을 a에 넣어준다
}
return result; // if문에서 걸렸다면 false, 아니라면 true를 리턴
}
/*
위에 함수를 더 설명드리자면
예를들어 a = 100이라면
100 % 10 = 0, 4 혹은 7 이 아니기 때문에 false를 리턴한다
아래 main함수에서 사용할 for문을 이용해 이 함수를 사용할 것이다
*/
int main() {
int a;
std::cin >> a;
for(int i = a; i >= 1; i--) { // a가 100이라면 100이 1이 될 때까지 i를 1씩 빼면서 비교한다(최댓값을 구하기 위해)
if(isNum(i)) { // isNum(i)가 true라면 i를 출력하고 for문을 종료
std::cout << i << std::endl;
break;
}
}
return 0;
}
/*
100보다 작은 4 or 7로 이루어져있는 숫자는 77이다
main함수의 for문에서 100, 99, 98, 97, 96...
이렇게 isNum함수에 대입하며 77이 됐을 때 true를 리턴하기 때문에
if문에 의해 i를 출력하고 for문을 종료할 수 있다
*/
#include <iostream>
bool isNum(int a) {
bool result = true;
while(a) {
if(!(a % 10 == 4 || a % 10 == 7)) {
result = false;
break;
}
a /= 10;
}
return result;
}
int main() {
int N;
std::cin >> N;
for(int i = N; i >= 1; i--) {
if(isNum(i)) {
std::cout << i << std::endl;
break;
}
}
return 0;
}
'C++ > 백준' 카테고리의 다른 글
[C++] 백준) 2033번 반올림 문제풀이 (0) | 2020.08.25 |
---|---|
[C++] 백준) 1977번 완전제곱수 문제풀이 (0) | 2020.08.25 |
[C++] 백준) 1356번 유진수 문제풀이 (0) | 2020.08.23 |
[C++] 백준) 1259번 팰린드롬수 문제풀이 (0) | 2020.08.23 |
[C++] 백준) 1357번 뒤집힌 덧셈 / int 뒤집는 함수 (0) | 2020.08.23 |