[백준/구현] 2304: 창고 다각형 - 파이썬

2022. 5. 13. 20:50· Problem Solving/CT-Python
목차
  1. 문제
  2. 풀이
  3. 제출한 풀이
  4. 더 짧은 풀이

문제

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

 

2304번: 창고 다각형

첫 줄에는 기둥의 개수를 나타내는 정수 N이 주어진다. N은 1 이상 1,000 이하이다. 그 다음 N 개의 줄에는 각 줄에 각 기둥의 왼쪽 면의 위치를 나타내는 정수 L과 높이를 나타내는 정수 H가 한 개의

www.acmicpc.net

 

풀이

그림1 . 기둥과 지붕(굵은 선)의 예

본인이 시도한 풀이는 다음과 같습니다.

  1. 먼저 순차적으로 위치별로 기둥의 높이를 리스트에 저장함 (info = [0] * 1001)
  2. 리스트에 저장하면서 가장 큰 기둥의 값과 인덱스를 다른 변수에 저장함
  3. 처음 기둥부터 가장 큰 기둥까지 좌에서 우로 기둥의 높이가 담긴 리스트들을 탐색한다
  4. 리스트를 탐색하면서 높이를 stack에 저장하고 stack의 마지막에 담긴 값을 area에 저장
  5. 첫번째 기둥은 높이를 저장할 stack 리스트에 저장함.
  6. 탐색중인 해당 기둥 i번째가 i+1번째의 기둥보다 높이보다 높다면  i+1번째 기둥의 높이는 stack에 넣지 않음
  7. 기둥 i번째 높이가 i+1보다 낮으면 i+1의 기둥높이를 stack에 저장함.
  8. 가장 큰 기둥의 위치 max_high_index까지 반복
  9. max_high_index 기준으로 오른쪽으로 마지막까지 3~8 과정을 반복함.
  10. 결과값인 area를 출력

 

제출한 풀이

n = int(input())
info = [0] * 1001
max_high = 0
max_high_index = 0
end_index = 0

for i in range(n):
    w, h = map(int, input().split())
    info[w] = h
    if max_high < h:
        max_high = h
        max_high_index = w
    end_index = max(end_index, w)

stack = []
area = 0

for i in range(0, max_high_index+1):
    if not stack:
        stack.append(info[i])
    else:
        if stack[-1] < info[i]:
            stack.append(info[i])
    area += stack[-1]

stack = []

for i in range(end_index, max_high_index, -1):
    if not stack:
        stack.append(info[i])
    else:
        if stack[-1] < info[i]:
            stack.append(info[i])
    area += stack[-1]

print(area)

 

더 짧은 풀이

n = int(input())

rec = [0 for _ in range(1001)]
for _ in range(n):
    l, h = map(int, input().split())
    rec[l] = h
max_idx = rec.index(max(rec))

max_val = 0
for i in range(max_idx):
    max_val = max(max_val, rec[i])
    rec[i] = max_val

max_val = 0
for i in range(1000, max_idx, -1):
    max_val = max(max_val, rec[i])
    rec[i] = max_val

print(sum(rec))

'Problem Solving > CT-Python' 카테고리의 다른 글

[백준/구현] 2116: 주사위 쌓기 - 파이썬  (0) 2022.05.13
[백준/누적합] 11659: 구간 합 구하기 - 파이썬  (0) 2022.05.13
[백준/DP] 2491: 수열 - 파이썬  (0) 2022.05.13
[SWEA/구현] 2007: 패턴 마디의 길이 - 파이썬  (0) 2022.05.04
[백준/DFS-BFS] 2606: 바이러스 - 파이썬  (0) 2022.05.04
  1. 문제
  2. 풀이
  3. 제출한 풀이
  4. 더 짧은 풀이
'Problem Solving/CT-Python' 카테고리의 다른 글
  • [백준/구현] 2116: 주사위 쌓기 - 파이썬
  • [백준/누적합] 11659: 구간 합 구하기 - 파이썬
  • [백준/DP] 2491: 수열 - 파이썬
  • [SWEA/구현] 2007: 패턴 마디의 길이 - 파이썬
White Han
White Han
Software Developer
White Han
sudo apt-get happiness
White Han
전체
오늘
어제
  • 분류 전체보기 (183)
    • Language (35)
      • Java (17)
      • Java-Weekly-study (0)
      • Python (18)
    • BackEnd (11)
      • Server (2)
      • Spring (3)
      • Spring Security (0)
      • JDBC (1)
      • NodeJS (2)
      • LINUX (3)
    • DataBase (10)
      • MySQL (5)
      • MongoDB (4)
      • Oracle (1)
    • Infra (4)
      • Docker (4)
    • CS (38)
      • OS (38)
    • Problem Solving (79)
      • Algorithm (8)
      • CT-Java (30)
      • CT-Python (41)
    • IDE (1)
      • eclipse (1)
      • vscode (0)
    • Etc. (3)
      • Git (1)
      • TDD, Refactor, CleanCode (1)
      • Conference (1)
    • 기록 (2)
      • 후기 (1)
      • 프로젝트 회고록 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

  • 방문해 주셔서 감사합니다.

인기 글

태그

  • 자바스크립스 식별자 종류
  • 자바 inheritance
  • SSAFY
  • 싸피 후기
  • 프로세스
  • 운영체제 역할
  • 자바 this
  • javascript identifier
  • OS
  • 운영체제 구조
  • 싸피8기
  • 자바 super
  • 싸피
  • 싸피 합격
  • 운영체제
  • 자바스크립트 개념
  • 알파스캔 모니터
  • Java Inheritance
  • 24인치 모니터 추천
  • Java this
  • AOC 24B1X
  • 자바스크립트
  • 사무용 모니터 추천
  • java
  • 사무용 모니터
  • javascript
  • 프로세서
  • 자바스크립트 식별자
  • Java super
  • 알파스캔 AOC 24B1X

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
White Han
[백준/구현] 2304: 창고 다각형 - 파이썬
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.