AIngerbon

닫기 검색결과 전체 보기

    [알고리즘] Greedy (탐욕법) - 백준 10162 11399 1541 1931 1715

    알고리즘 2023. 2. 23. 00:52

    그리디 알고리즘에 대해 공부해보자.

    Greedy = 탐욕 = 현재 상황에서 가장 좋은 것만을 선택하는 방법

     

     

    그리디 예시 - 거스름돈

     

    거스름돈을 거슬러 줄 때 최소 동전(지폐 포함) 개수를 구하는 방법 = '가장 큰 화폐 단위' 부터 거슬러주는 방법이다.

    어떻게 구현할 수 있을까?

    changes = 14570	# 거스름돈
    count = 0	# 거스름돈 화폐 개수
    
    money_types = [10000, 5000, 1000, 500, 100, 50, 10]	
    
    for money in money_types:
    	count += changes // money
        changes %= money
        
    print(count)

     

    그리디 문제점

    현재 상황에서 가장 좋은 것 = 전체 상황에서 가장 좋은 것?아니다.

     

    부분 최적해는 구할 수 있지만 전체 최적해는 구할 수 없는 경우가 존재한다.

     

     

    그리디 문제풀이

    백준 사이트에 올라온 그리디 문제들을 풀어보자. 코딩 실력이 아직 부족한 관계로 쉬운 문제들 위주다.

     

    10162 전자레인지

     

    A 5분, B 1분, C 10초로 최소로 버튼을 눌러 지정된 시간 맞추기, 못 맞추는 시간 단위면 -1 출력

     

    t = int(input())
    
    a = 300
    b = 60
    c = 10
    ans = []
    
    ans.append(t//a)
    t %= a
    ans.append(t//b)
    t %= b
    ans.append(t//c)
    
    if t % c != 0:
        print(-1)
    else:
        for x in ans:
            print(x, end = " ")

     

    그리디의 정석이 아닐까 싶은 문제다. 차근차근 내려오면서 풀면 된다.

     

     

    11399 ATM

     

    사람 N명, i번째 사람이 돈 인출 시 걸리는 시간 Pi분, 인출하는 시간 총 합의 최솟값?

    import sys
    n = int(input())
    
    p = list(map(int, sys.stdin.readline().split()))
    
    p = sorted(p)
    ans = 0
    for i in range(len(p)):
        ans += sum(p[:i+1])
        
    print(ans)

     

    1541 잃어버린 괄호

    문자열 입력받고 적절한 곳에 괄호 넣어서 최솟값 만들기

    s = input()
    
    sic = s.split('-')
    num = []
    for x in sic:
        tmp = 0
        el = x.split('+')
        for i in el:
            tmp += int(i)
        num.append(tmp)   
    
    n = num[0]
    for j in range(1, len(num)):
        n -= num[j]
    
    print(n)

     

    1931 회의실 배정

    시작 시간 / 끝 시간이 주어지면 진행 가능한 최대 회의의 개수 찾기

    n = int(input())
    
    meet = []
    for i in range(n):
        time = list(map(int, input().split()))
        meet.append(time)
    
    meet = sorted(meet, key = lambda x : [x[1],x[0]])
    
    cnt = 1
    tmp = meet[0][1]
    for  i in range(1, len(meet)):
        if tmp <= meet[i][0]:
            cnt += 1
            tmp = meet[i][1]
    
    print(cnt)

    람다식좀 잘 알아두면 좋을 것 같다 맨날 생각은 하면서 잘 안쓰게 된다

     

    1715 카드 정렬하기

     

    처음엔 그냥 소트해서  풀면 될 줄 알았는데 자꾸 출력 초과같은게 떠서 검색해보니까

    힙을 쓰는거였다.

    자료구조에 좀 더 익숙해져야 한다

    """
    n = int(input())
    
    cards = []
    
    for i in range(n):
        cards.append(int(input()))
        
    cards = sorted(cards)
    
    tmp = cards[0]
    compare = 0
    for j in range(1, len(cards)):
        compare += tmp + cards[j]
        tmp = compare
        
    print(compare)
    
    """
    
    import sys
    import heapq
    
    
    n = int(sys.stdin.readline())
    cards = []
    for _ in range(n):
        heapq.heappush(cards, int(sys.stdin.readline()))
    
    if len(cards) == 1:
        print(0)
    else:
        ans = 0
        while len(cards) > 1:
            tmp1 = heapq.heappop(cards)
            tmp2 = heapq.heappop(cards)
            ans += tmp1 + tmp2
            heapq.heappush(cards, tmp1 + tmp2)
        print(ans)

    저작자표시 비영리 변경금지 (새창열림)

    '알고리즘' 카테고리의 다른 글

    [알고리즘] DP(Dynamic Programming) - 백준 17202 9655 2579 2156 2565 1967 3020  (1) 2023.03.04
    [알고리즘] 이진 탐색(Binary Search) - 백준 10816 2512 2805 16564 2467 1339 7576  (0) 2023.03.01
    [알고리즘] 정렬 - 백준 2750 1920 2108 1946 2470 1461 10026  (0) 2023.02.28
    [알고리즘] DFS / BFS + 백준 10828 10845 17478 1388 2606 1260 1325 2138  (0) 2023.02.25
    [알고리즘] 구현 - 백준 1009 2563 11655 18111 18405 1092 (그리디)  (1) 2023.02.23
    '알고리즘' 관련 글 more
    • [알고리즘] 이진 탐색(Binary Search) - 백준 10816 2512 2805 16564 2467 1339 7576 2023.03.01
    • [알고리즘] 정렬 - 백준 2750 1920 2108 1946 2470 1461 10026 2023.02.28
    • thumbnail
      [알고리즘] DFS / BFS + 백준 10828 10845 17478 1388 2606 1260 1325 2138 2023.02.25
    • [알고리즘] 구현 - 백준 1009 2563 11655 18111 18405 1092 (그리디) 2023.02.23
    Posted by 저본
블로그 이미지

by 저본

공지사항

    최근...

  • 포스트
  • 댓글
  • 더 보기

태그

  • DP
  • 혼자 공부하는 컴퓨터구조 책
  • 데이터프레임
  • 혼공컴운
  • keras
  • aivle
  • 시계열 데이터
  • KT
  • CS스터디
  • 에이블스쿨 3기
  • 그리디 알고리즘
  • CPU 작동 원리
  • 파이썬
  • DFS
  • 그리디
  • kt aivle
  • 딥러닝
  • KT AIVLE 3기
  • 코테연습
  • 에이블스쿨
  • 이변량
  • 이변량분석
  • aivle 3기
  • BFS
  • 정렬
  • 에이블 3기
  • pandas
  • 알고리즘
  • 단변량분석
  • 백준

글 보관함

«   2025/07   »
일 월 화 수 목 금 토
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

링크

카테고리

분류 전체보기 (30)
딥러닝 (0)
알고리즘 (14)
일상 (1)
AIVLE (12)
CS 스터디 (2)

카운터

Total
Today
Yesterday
  • 홈
  • 태그
  • 방명록
저본's Blog is powered by daumkakao
Skin info material T Mark 5+ by 뭐하라
favicon

AIngerbon

  • 홈
  • 태그
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • 분류 전체보기 (30)
    • 딥러닝 (0)
    • 알고리즘 (14)
    • 일상 (1)
    • AIVLE (12)
    • CS 스터디 (2)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바