데이터사이언스 기록기📚

[백준/Python] 10271번(완탐)_고층 건물 본문

Coding Test/백준(Python)

[백준/Python] 10271번(완탐)_고층 건물

syunze 2023. 10. 9. 18:05

📌문제 유형

수학, 브루트포스 알고리즘, 기하학(골드 Lv.4)

 

📌문제

 

1027번: 고층 건물

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

www.acmicpc.net

 

📌나의 문제풀이

- i는 현재 확인하려는 고층건물, j는 i의 조건에 적합한지 확인하는 고층건물.

- k는 i,j 선분에 고층건물이 있는지 확인

  • 방정식으로 선분 만들고, y값 비교 
n = int(input())
y = list(map(int,input().split()))
x = [i for i in range(1,n+1)]
coord = list(zip(x,y))

result = []
ans = 0

for i in range(len(coord)):
    for j in range(len(coord)):
        flag = 0
        if i == j:
            continue
        else:
            x1, y1 = coord[i]
            x2, y2 = coord[j]

        for k in range(min(i,j)+1, max(i,j)):
            tmp = ((y2-y1) / (x2-x1)) * (coord[k][0]-x1) + y1
            if coord[k][1] >= tmp:
                flag = 1
                break

        if flag == 0:
            ans += 1
        
    result.append(ans)
    ans = 0
print(max(result))

 

📌 다른사람의 문제풀이

- 기울기 각도에 따른 비교

- 왼쪽은 이전 값보다 작은 경우 += 1, 오른쪽은 이전 값보다 큰 경우 += 1

 

(Python/파이썬) - 백준(BOJ) 1027번 : 고층 건물

https://www.acmicpc.net/problem/1027 1027번: 고층 건물 세준시에는 고층 빌딩이 많다. 세준시의 서민 김지민은 가장 많은 고층 빌딩이 보이는 고층 빌딩을 찾으려고 한다. 빌딩은 총 N개가 있는데, 빌딩은

recordofwonseok.tistory.com

 

 

[백준 알고리즘: python 3] #1027 - 고층 건물

https://www.acmicpc.net/problem/1027 1027번 문제는 겉보기에 그렇게 어렵지 않게 보이지만, 약간의 수학적인 아이디어가 필요한 문제입니다. 여기서 사용된 수학적인 아이디어란, 어떤 건물에서 다른 건

nerogarret.tistory.com

import sys
input = sys.stdin.readline

def calc(x1,y1,x2,y2):
    return (y2-y1)/(x2-x1)

N = int(input())
building = list(map(int,input().split()))
answer = 0
for idx, b in enumerate(building):
    view_max = 0
    left_max = float('inf') # 왼쪽의 기울기 최솟값
    right_max = -float("inf") # 오른쪽 기울기 최댓값
    for i in range(idx-1,-1,-1):  # 왼쪽
        c = calc(idx+1,b,i+1,building[i]) 
        if c < left_max: # 기울기가 더 작다면
            left_max = c 
            view_max += 1
    for i in range(idx+1,N):  # 오른쪽
        c = calc(idx+1,b,i+1,building[i])
        if c > right_max: # 기울기가 더 크다면
            right_max = c
            view_max += 1
    answer = max(answer,view_max)
print(answer)

 

📌 리뷰

- 수학적으로 접근하는 과정도 필요하다!

728x90
Comments