본문 바로가기
백준 (코테)

16. [12단계] 제목: 브루트 포스 (5~6챕터)

by 코린이의 세계 2024. 8. 29.
5단계.
종말의 수란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 수는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, .... 이다. 따라서, 숌은 첫 번째 영화의 제목은 "세상의 종말 666", 두 번째 영화의 제목은 "세상의 종말 1666"와 같이 이름을 지을 것이다. 일반화해서 생각하면, N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 수) 와 같다.
숌이 만든 N번째 영화의 제목에 들어간 수를 출력하는 프로그램을 작성하시오.

첫째 줄에 N이 주어진다. N은 10,000보다 작거나 같은 자연수이다.

첫째 줄에 N번째 영화의 제목에 들어간 수를 출력한다.

답:

n = int(input())

theEndNumber = 666 #종말번호
count = 0 
while (1): 
    if '666' in str(theEndNumber): 
        count += 1 
        if count == n: #그 카운트값이 입력값과 같다면
            break #반복문 탈출
    theEndNumber += 1 #종말번호를 계속해서 1씩 증가

print(theEndNumber)

theEndNumber는 종말번호이다. 번호는 당연히 666이여야 한다. 이후 str를 이용해서 문자열 취급을 해준다.

종말번호가 포함되면 카운트 값을 추가하며, 그 값과 n인 입력값이 같으면 반복문을 탈출한다. 탈출하기 전까지는 계속해서 종말번호에 1을 추가해 준다. 

반복문이 탈출되고 이후 종말번호를 출력해주면 된다.


6단계.
상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.
상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.
상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.

첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000)

상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정확하게 N킬로그램을 만들 수 없다면 -1을 출력한다.

답: 

n = int(input())
if (n % 5 == 0):  # 5으로 나눠떨어질 때
    print(n // 5)
else:
    p = 0
    while (n > 0):
        n -= 3
        p += 1
        if (n % 5 == 0):  # 3kg과 5kg를 조합해서 담을 수 있을 때
            p += n // 5
            print(p)
            break
        elif (n == 1 or n == 2):  # 설탕 봉지만으로 나눌 수 없을 때
            print(-1)
            break
        elif (n == 0):  # 3으로 나눠떨어질 때
            print(p)
            break

포인트는 5킬로짜리 봉지이다. 3킬로짜리 봉지와 5킬로짜리 봉지가 존재한다면, 우선순위는 5킬로짜리가 된다. 예를 들어 n이 15라면 그냥 5킬로짜리 3개를 들고 가면 된다. 따라서 일단 if문의 초반을 5로 딱 나뉠 때부터 시작해야 한다.

이후 그게 아니면 p을 하나 할당해서 p로 봉지를 카운팅할 것이다.

이후 반복문을 이용해서 모든 경우수를 찾아가는 것이다.

먼저 n에 3을 빼주고 p에느 1을 더해서 초반을 설계해 준다. 이후 경우의 수를 따라서 if문을 나누어준다.

참고로 정확하게 N킬로그램을 만들 수 없다면 -1을 출력하라고 했기에, n이 1이거나 2이면 -1을 출력해 주면 된다. (반복문은 계속 돌아간다. 반복문에는 계속해서 n에 3을 뺀 값을 n에 기입하고, p에 1을 더한 값을 p에 기입한다.) 어차피 n이 딱 떨어지고 싶다면 3의 배수이거나 5의 배수, 3의 배수와 5의 배수의 조합이어야 하기 때문이다.

 

'백준 (코테)' 카테고리의 다른 글

18. 단어 뒤집기(9093)  (0) 2024.09.04
17. 스택(10828)  (0) 2024.09.02
15. [12단계] 제목: 브루트 포스 (3~4챕터)  (2) 2024.08.28
14. [12단계] 제목: 브루트 포스 (1~2챕터)  (1) 2024.08.27
브루트 포스 알고리즘  (1) 2024.08.25