728x90
SMALL
백준 문제 풀이: 1526
문제 링크: https://www.acmicpc.net/problem/1526
문제 설명:
금민수란 숫자의 모든 자릿수가 4와 7로만 이루어진 수를 뜻합니다. 주어진 자연수 n
이하의 가장 큰 금민수를 구하는 문제입니다.
문제 해결 코드
// 가장 큰 금민수 문제의 최적화된 코드
#include <iostream>
#include <string>
using namespace std;
bool isGoldMinNumber(int num) {
// 숫자를 문자열로 변환하여 금민수 여부를 확인
string s = to_string(num);
for (char c : s) {
if (c != '4' && c != '7') return false; // 금민수가 아님
}
return true; // 금민수
}
int main() {
ios::sync_with_stdio(false); // 입출력 속도 향상
cin.tie(NULL);
int n;
cin >> n;
for (int i = n; i >= 4; i--) { // n부터 4까지 역순 탐색
if (isGoldMinNumber(i)) { // 금민수 여부 확인
cout << i << '\n';
break;
}
}
return 0;
}
코드 설명
코드의 주요 로직과 사용된 알고리즘 설명:
- 핵심 알고리즘: 숫자를 문자열로 변환해 각 자릿수를 검사하여 금민수 여부를 판단합니다. 주어진 숫자
n
에서 4까지 역순으로 탐색하며 가장 큰 금민수를 찾습니다. - 구현 세부사항:
isGoldMinNumber
: 숫자를 문자열로 변환하고, 각 자릿수가 4와 7로만 이루어졌는지 검사하는 함수입니다.- 메인 루프에서는
n
부터 시작하여 4까지 역순으로 숫자를 검사합니다. 가장 큰 금민수를 발견하면 즉시 출력 후 종료합니다. - 시간 복잡도 분석:
- 최악의 경우,
n
부터 4까지 모든 숫자를 확인하므로 시간 복잡도는O(n * d)
입니다. 여기서d
는 숫자의 최대 자릿수입니다. - 금민수를 빠르게 찾는 구조이므로 실제 실행 시간은
n
의 크기에 따라 효율적입니다.
결과
위 코드는 입력 n
에 대해 가장 큰 금민수를 정확하고 효율적으로 구합니다. isGoldMinNumber
함수를 별도로 구현하여 가독성을 높였으며, 역순 탐색으로 불필요한 연산을 최소화했습니다.
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 브루트포스' 카테고리의 다른 글
백준 10974번 [모든 순열](C++) -yes6686- 티스토리 (0) | 2024.11.14 |
---|---|
백준 5671번 [호텔 방 번호](C++) -yes6686- 티스토리 (0) | 2024.11.13 |
백준 2003번 [수들의 합 2](C++) -yes6686- 티스토리 (2) | 2024.09.02 |
백준 1051번 [숫자 정사각형](C++) -yes6686- 티스토리 (0) | 2024.08.14 |
백준 5555번 [반지](C++) -yes6686- 티스토리 (0) | 2024.08.06 |