문제링크
https://www.acmicpc.net/problem/1526
문제
은민이는 4와 7을 좋아하고, 나머지 숫자는 싫어한다. 금민수는 어떤 수가 4와 7로만 이루어진 수를 말한다.
N이 주어졌을 때, N보다 작거나 같은 금민수 중 가장 큰 것을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. N은 4보다 크거나 같고 1,000,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 N보다 작거나 같은 금민수 중 가장 큰 것을 출력한다.
해석
가장 큰 금민수를 찾아야 하기 때문에 입력받은 수부터 하나씩 줄여가며 확인한다.
4와 7로 이루어져 있다면 10으로 mod연산을 했을 때 나머지가 항상 4아니면 7이여야 한다.
만약 나머지가 4나 7이라면 입력받은 값을 10으로 나눠주고 또 확인한다.
위의 과정을 N이 0이 될 때까지 반복하여 금민수를 찾을 수 있다.
코드
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 | #include <iostream> using namespace std; bool geummin(int n) { bool possible = true; while (n) { if ((n % 10 == 4) || (n % 10 == 7)) { n = n / 10; } else { return false; } } return true; } int main() { int n; cin >> n; for (int i = n; i >= 4; i--) { if (geummin(i)) { cout << i; break; } } } | cs |
Memo
정답률이 58프로 문제인데 나한테는 굉장히 어려웠던 문제다.
역시 정답률과 문제의 난이도는 비례하지 않는 것 같다. 쫄지말고 쉽다고 얕보지도 말자.