[5문제] 그리디 문제풀이 02

m1njae·2022년 1월 9일
0

5문제

목록 보기
2/14
post-thumbnail

백준 10162번

해결 아이디어

거스름돈 유형의 문제이다. 3개의 버튼으로 T초를 맞출 수 없으면 음수 -1을 출력하는데 이 경우는 A,B,C가 모두 C의 배수이므로 T초를 C로 나누었을 때, 나누어 떨어지지 않는다면 3개의 버튼으로 T초를 맞출 수 없다는 것을 의미한다.

내가 작성한 코드

time = int(input())

array = [300, 60, 10]
count = [ ]
for button in array:
    if time % 10 != 0:
        count.append(-1)
        break
    else:
        count.append(time // button)
        time %= button
for lst in count:
    print(lst , end = ' ')

배열과 for문을 통해 문제를 해결했는데, 시간의 종류가 3가지뿐이라 배열을 활용하지 않아도 간단하게 작성할 수 있을 것 같았다.

수정한 코드

time = int(input())

if time % 10 != 0:
   print(-1)

else:
   a = b = c = n = 0
   
   a = time // 300
   n = time % 300

   b = n // 60
   n = n % 60

   c = n // 10
   n = n % 10

   print(a, b, c)

백준 2864번

해결 아이디어

최솟값은 A,B에 5,6이 존재할 때 모두 5로 볼 경우이고 최댓값은 모두 6으로 볼 경우이다. 문자열로 A,B를 받아내고 replace()함수를 통해 5,6을 바꿔준 후, int형으로 두 수의 합을 계산하여 문제를 해결하였다.

내가 작성한 코드

a, b = input().split()
min_sum = int(a.replace('6','5')) + int(b.replace('6','5'))
max_sum = int(a.replace('5','6')) + int(b.replace('5','6'))
print(min_sum,max_sum)

백준 2720번

해결 아이디어

거스름돈 유형의 문제이다. 동전의 종류가 4가지여서 10162번 문제에서 수정한 코드와 같은 방법으로 문제를 해결하였다.

내가 작성한 코드

case = int(input())
    
for i in range(case):

    num = int(input())
    
    q = num // 25
    c = num % 25

    d = c // 10
    c = c % 10

    n = c // 5
    c = c % 5

    p = c // 1

    print(q,d,n,p)

백준 2810번

해결 아이디어

여러가지 경우의 수를 생각해보았을 때 커플석이 없을 경우에 컵 홀더의 개수는 (사람의 수 + 1)이다. 커플석이 n쌍일 때, 컵 홀더는 n개씩 없어지게 되므로 (사람의 수 + 1 - n)이 컵 홀더의 개수가 된다.

내가 작성한 코드

count = int(input())
seat = input()

couple = seat.count('LL')
if couple <= 1:
    print(count)
else:
    print(count - couple + 1)

백준 14659번

해결 아이디어

최댓값을 구하는 문제와 유사하다고 생각했다. 봉우리의 높이들을 리스트에 넣고 봉우리의 높이를 비교해가면서 처치하는 숫자를 늘려나가면 된다. 이때, 현재 봉우리의 높이보다 높은 봉우리를 만났을 경우는 처치하는 숫자를 0으로 초기화해주고 처치할 수 있는 최대 숫자와 비교해주는 과정을 거치면 된다.

내가 작성한 코드

mountain = int(input())
height = list(map(int, input().split()))

count = 0
max_count = 0
max_mountain = 0

for i in height:
    if  i > max_mountain:
        max_mountain = i
        count = 0
    else:
        count += 1
        max_count = max(max_count, count)
print(max_count)
profile
할 수 있는 것부터 차근차근, 항해자의 공부 기록공간

0개의 댓글

관련 채용 정보