예꾸
개발자국
예꾸
전체 방문자
오늘
어제
  • 분류 전체보기 (111)
    • CS (6)
      • 데이터베이스 (5)
      • 운영체제 (0)
      • Computer Architecture (1)
    • 끄적끄적 (4)
    • 이론 (29)
      • 알고리즘 (18)
      • 자료구조 (4)
      • WEB (2)
      • JS (2)
      • Git (2)
      • Python (1)
    • 면접준비 (3)
      • Vue (1)
      • Design Pattern (1)
      • Frontend (1)
    • 개발기술 (20)
      • Git PUSH 자동화 (3)
      • VUE (1)
      • Linux (2)
      • MERN Stack (2)
      • React기반 Gatsby로 블로그 개발하기 (6)
      • Typescript (0)
      • 감정일기장(React) (3)
      • CI CD (3)
    • 코드트리 (6)
      • 블로그 챌린지 (3)
      • 모의시험 (3)
    • 취업준비 (3)
      • 코딩테스트 후기 (3)
    • 프로그래머스 (8)
      • SQL (7)
      • 알고리즘 (1)
    • 백준 (31)
      • 그리디(탐욕법) (6)
      • 구현 (5)
      • 그래프탐색(dfs, bfs) (5)
      • 완전탐색 (5)
      • 문자열 (5)
      • 누적합 (2)
      • DP(다이나믹 프로그래밍) (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코드트리
  • 백준 그래프탐색
  • 나만의공부노트
  • 백준 완전탐색
  • 코드트리 추천
  • 코딩테스트
  • 백준 구현
  • 프로그래머스 SQL
  • 프로그래머스
  • 백준 그리디
  • 알고리즘
  • 운영체제
  • javascript
  • JS
  • 백준 문자열
  • gatsby
  • React
  • 코딩테스트실력진단
  • 자료구조
  • 컴퓨터 시스템의 구조

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
예꾸

개발자국

[백준 13305] 주유소 - python
백준/그리디(탐욕법)

[백준 13305] 주유소 - python

2021. 6. 4. 02:33

https://www.acmicpc.net/problem/13305

 

13305번: 주유소

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1

www.acmicpc.net

 

문제 풀이

틀린 풀이

  • 이 때 생각은 cost의 값들 중에서 최소값만 찾아 최소값이 나오기 전까지는 다음 목적지까지 가기위한 기름만 사고
  • 최소값이 나오면 끝까지 갈 기름을 사면 된다고 생각했다
  • 하지만 해당 테스트 케이스를 진행했을 때 틀린 것을 확인할 수 있었다
5
1 1 1 1
9 11 5 12 1
  • 해당 테스트 케이스에서 내 코드는 9에서 한번 11에서 한번 5에서 두번을 해서 30이 나와 실패했지만 
  •  정상적인 답은 9에서 2번 5에서 2번 가야 답 28이 나온다
n = int(input())
length = list((map(int, input().split())))
cost = list((map(int, input().split())))


# 해당 값이 최소 값이 아니면 다음목적지까지 가기위한 기름만 넣음
# 만약 해당값이 최소값이면 끝까지의 거리값 * 리터당가격 해줌
min_cost = min(cost[:len(cost)-1])
result = 0
flag = False
# print(min_cost)

for i in range(n-1):
    # print(length[i], cost[i])
    if cost[i] == min_cost:
        flag = True
        result += length[i] * min_cost
    else:
        if flag == False:
            result += length[i] * cost[i]
        else:
            result += length[i] * min_cost

print(result)

 

정답 코드

  • 해당 코드에서 min_cost값을 무한으로 먼저 초기화 하고 for문을 돌면서 min_cost값보다 현재 cost[i]이 작으면 min_cost값을 갱신할 수 있도록 했다
n = int(input()) # 도시 개수
length = list((map(int, input().split()))) # 거리
cost = list((map(int, input().split()))) # 비용


min_cost = 987654321

# 매번 최소 비용이 갱신되도록 해줌
for i in range(n-1):
    if cost[i] < min_cost:
        min_cost = cost[i]
    result += length[i] * cost[i]

print(result)
    '백준/그리디(탐욕법)' 카테고리의 다른 글
    • [백준 1758] 알바생 강호 - python
    • [백준 1343] 폴리오미노 - python
    • [백준 2217] 로프 - python
    • [백준 14916] 거스름돈 - python
    예꾸
    예꾸
    비전공자 옒의 개발이야기💻

    티스토리툴바