티스토리 뷰
문제
은민이는 4와 7을 좋아하고, 나머지 숫자는 싫어한다. 금민수는 어떤 수가 4와 7로만 이루어진 수를 말한다.
N이 주어졌을 때, N보다 작거나 같은 금민수 중 가장 큰 것을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. N은 4보다 크거나 같고 1,000,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 N보다 작거나 같은 금민수 중 가장 큰 것을 출력한다.
#include <iostream>
using namespace std;
int main() {
int n, temp, flag;
cin >> n;
for (int i = n; i >= 0; i--) {
temp = i;
flag = 1;
while (temp != 0) {
if (temp % 10 != 4 && temp % 10 != 7) {
flag = 0;
break;
}
else {
temp /= 10;
}
}
if (flag == 1) {
cout << i << endl;
break;
}
}
}
해결: 입력받은 수부터 1씩 감소하면서 탐색(금민수 중 최댓값을 찾기 위함)
그 수의 일의 자리부터 가장 높은 자리까지 살펴보면서 4나 7로 이루어져 있는지 확인
만약 한 자리수라도 4나 7이 아니라면 flag를 0으로 한 후, while문을 탈출해서 다음 수를 검사
4나 7로 구성되어 있다면 10으로 나눠서 다음 자리수를 검사
가장 높은 자리까지 4와 7로만 구성되어 있다면 while문 탈출
만약 flag가 여전히 1이라면 모두 4와 7로만 구성된 숫자이므로 출력
'백준 > BRONZE' 카테고리의 다른 글
[백준/C++] 1236 성 지키기 (0) | 2021.02.27 |
---|---|
[백준/C++] 1157 단어 공부 (0) | 2021.02.25 |
[백준/C++] 1145 적어도 대부분의 배수 (0) | 2021.02.25 |
[백준/C++] 2231 분해합 (0) | 2021.02.24 |
[백준/C++] 1919 애너그램 만들기 (0) | 2021.02.23 |