문제
은민이는 4와 7을 좋아하고, 나머지 숫자는 싫어한다. 금민수는 어떤 수가 4와 7로만 이루어진 수를 말한다.
N이 주어졌을 때, N보다 작거나 같은 금민수 중 가장 큰 것을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. N은 4보다 크거나 같고 1,000,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 N보다 작거나 같은 금민수 중 가장 큰 것을 출력한다.
예제 입력 1 복사
100
예제 출력 1 복사
77
예제 입력 2 복사
75
예제 출력 2 복사
74
예제 입력 3 복사
5
예제 출력 3 복사
4
예제 입력 4 복사
474747
예제 출력 4 복사
474747
내 풀이:
import itertools
arr=[]
for i in range(1,7):
a = list(map(''.join, itertools.product((['4','7']), repeat=i)))
for j in a:
arr.append(j)
arr=reversed(list(map(int, arr)))
n=int(input())
for i in arr:
if i>n:
continue
print(i)
break
#
브루트포스 6번째 문제만에 드디어 itertools를 찾아서 쓰게 되었다.
4랑 7의 중복조합으로 만들 건데 한자릿수부터 6자릿수까지 따로 생각을 해서 조합을 구한다.
그다음에 뭐 리스트를 정수형으로 만들고 큰 수부터 하나씩 n이랑 비교해서 n이랑 같거나 작아지는 순간 i를 출력한다.
#
이거는 백준 파이썬 기준 맞힌사람 2241명 중에서 열 번째라고 나오니까 뭔가 잘한 것 같음. 근데 뭐가 잘한 건지는 모르겠다.
if __name__ == '__main__':
n = int(input())
while True:
flag = True
for i in str(n):
if i != '4' and i != '7':
flag = False
n -= 1
if flag:
print(n)
break
#
다른 사람의 신기한 풀이
입력값 n부터 1 씩 빼가면서 모든 숫자가 4또는 7이 나올 때까지 for문을 돌리는 것이다. 내가 한 것처럼 하면 조합이랑 n이랑 비교하니까 비교할 게 많지는 않은데 이건 n부터 시작해서 모든 수, 그리고 그 수 안의 모든 자릿수를 살펴봐야 하니까 오래 걸리긴 할 것 같다.
'알고리즘 PS > BruteForce' 카테고리의 다른 글
백준 #1065 한수 (0) | 2023.10.02 |
---|---|
백준 #7568 덩치 (0) | 2023.10.02 |
백준 #2309 일곱난쟁이 (2) | 2023.08.31 |
백준 #1977 완전제곱수 (0) | 2023.08.31 |
백준 #2231 분해합 (0) | 2023.08.31 |