문제링크
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보다 작거나 같은 금민수 중 가장 큰 것을 출력한다.
해석
가장 큰 금민수를 찾아야 하기 때문에 입력받은 수부터 하나씩 줄여가며 확인한다.
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프로 문제인데 나한테는 굉장히 어려웠던 문제다.
역시 정답률과 문제의 난이도는 비례하지 않는 것 같다. 쫄지말고 쉽다고 얕보지도 말자.