[백준 1027] 고층 건물

2021. 5. 12. 22:12·알고리즘 문제풀이

www.acmicpc.net/problem/1027

 

1027번: 고층 건물

세준시에는 고층 빌딩이 많다. 세준시의 서민 김지민은 가장 많은 고층 빌딩이 보이는 고층 빌딩을 찾으려고 한다. 빌딩은 총 N개가 있는데, 빌딩은 선분으로 나타낸다. i번째 빌딩 (1부터 시작)

www.acmicpc.net

N = int(input())
bd= list(map(int,input().split()))

def left_view(i):
    line = 10000000000
    view = 0
    cur_idx = i-1
    while cur_idx >= 0:
        dx = i-cur_idx
        dy = bd[i] - bd[cur_idx]
        dydx = dy/dx

        if dydx < line:
            view+=1
            line = dydx
        cur_idx-=1
    return view

def right_view(i):
    line = -10000000000
    view = 0
    cur_idx = i+1
    while cur_idx < N:
        dx = cur_idx-i
        dy = bd[cur_idx] - bd[i]
        dydx = dy/dx

        if dydx > line:
            view+=1
            line = dydx
        cur_idx+=1
    return view

idx = 0
max_view = 0
for i in range(N):
    l = left_view(i)
    r = right_view(i)
    # print("=======")
    # print("빌딩 인덱스 :",i)
    # print("빌딩 왼쪽 :",l)
    # print("빌딩 오른쪽 :",r)
    total = l+r
    if max_view < total:
        max_view = total
        idx = i

print(max_view)

풀이

처음엔 스택인가 했다. 이런류의 스택문제가 많기 때문에 그렇게 생각했다. 하지만 N이 작고 이중포문으로 체크하면 끝날 하나씩 다 체크해도 시간이 충분할 것 같았기 때문에 생각을 멈추고 아래와 같이 구현했다.

 

각각 빌딩에서 볼 수 있는 최대 빌딩의 수를 구한다.

빌딩 수가 50 이하이므로 이중포문을 돌려도 충분하다.

 

1. 빌딩에서 왼쪽을 볼때

- 빌딩 바로 왼쪽부터 왼쪽 끝까지 진행

- 기울기가 지속적으로 감소해야 한다.

- 최대로 작았던 기울기르 저장해놓고 그것보다 작은 기울기가 나왔을 때만 값을 추가한다.

 

2. 빌딩에서 오른쪽을 볼때

- 빌딩 바로 오른쪽부터 오른쪽 끝까지 진행

- 기울기가 지속적으로 증가해야 한다.

- 최대로 큰 기울기를 저장해놓고 그것보다 큰 기울기가 나왔을 때만 값을 추가한다.

 

시간복잡도

N개의 빌딩이 존재하고, 빌딩마다 전체 N개의 빌딩을 탐색하기 때문에 O(N^2) 이다.

'알고리즘 문제풀이' 카테고리의 다른 글

[백준 18405] 경쟁적 전염  (0) 2021.05.12
[백준 1034] 램프  (0) 2021.05.12
[백준 1004] 어린왕자  (0) 2021.05.12
[백준 15954] 인형들  (0) 2021.05.11
[백준 1188] 음식 평론가  (0) 2021.05.11
'알고리즘 문제풀이' 카테고리의 다른 글
  • [백준 18405] 경쟁적 전염
  • [백준 1034] 램프
  • [백준 1004] 어린왕자
  • [백준 15954] 인형들
WildDevmon
WildDevmon
『앗! 야생의 개발몬(이)가 나타났다!』
  • WildDevmon
    야생의 개발몬
    WildDevmon
  • 전체
    오늘
    어제
    • 분류 전체보기 (33) N
      • Server (3) N
      • 알고리즘 문제풀이 (27)
      • 회고 (3)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준15954
    프로그래머스 보석 쇼핑
    백준 파티
    백준 17281
    자바 스레드 상태
    네카라쿠배 취업
    통나무 자르기
    백준 1034
    1114백준
    백준1188
    백준 어린 왕자
    ai개발자
    백준 인형들
    백준 고층 건물
    백준 5347
    백준 18405
    백준 램프
    합승 택시 요금
    백준2262
    direct buffer
    소가 길을 건너간 이유 5
    카카오 필요스펙
    소수&팰린드롬
    토너먼트 만들기
    경력 서류
    백준14465
    선발 명단
    프로그래머스 정수 삼각형
    백준6980
    백준 경쟁적 전염
    다이렉트 버퍼
    백준 1114
    백준1238
    백준1747
    자바 물리 메모리
    카카오 1차
    백준 1114 파이썬
    파이썬
    자바 최대공약수
    백준 1004
    보석 쇼핑
    카카오 인턴
    네이티브 메모리
    백준 10610
    커널 스레드 상태
    백준 30
    2020 카카오 인턴
    백준 1027
    컴공 취준
    자바 최소공배수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
WildDevmon
[백준 1027] 고층 건물
상단으로

티스토리툴바