문제

은민이는 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

+ Recent posts