[항해99] 18일차 알고리즘
항해 99
18일 차 :
1) 알고리즘
Brute Force
문제를 해결하기 위해 가능한 모든 경우의 수를 계산하여 답을 얻는 방법:
무식한 방법 같지만 , 확실하게 답을 알 수 있고
구현이 쉽다.
아래 문제는 좌표 간의 제일 가까운 거리를 찾아내는 알고리즘:
가능한 모든 거리를 보고
i와 j의 range의 를 찾아보았다.
# 제곱근 사용을 위한 sqrt 함수
from math import sqrt
# 두좌표의 직선 거리를 계산해 주는 함수
def distance(store1, store2):
return sqrt((store1[0] - store2[0]) ** 2 + (store1[1] - store2[1]) ** 2)
# 가장 가까운 두좌표 을 찾아주는 함수
def closest_pair(coordinates):
min = [coordinates[0],coordinates[1]]
for i in range(0, len(coordinates)-1):
for j in range(i+1, len(coordinates)):
store1 = coordinates[i]
store2 = coordinates[j]
if distance(store1,store2) < distance(min[0], min[1]):
min = [store1, store2]
return min
# 테스트
test_coordinates = [(2, 3), (12, 30), (40, 50), (5, 1), (12, 10), (3, 4)]
print(closest_pair(test_coordinates))
-
코드 잇 강남역 폭우:
# code it gangnam.py
water = 0
def trapping_rain(buildings):
# 코드를 작성하세요
if len(buildings) > 1:
for i in range(len(buildings)):
if buildings[i] > 0:
left = i
break
for j in range(len(buildings)):
if buildings[j] > buildings[i]:
right = j
break
print(i,j)
k=min(buildings[i],buildings[j])
print(k, "the limit")
for x in range(i, j):
if buildings[x] < k:
print("hi the index is " , x)
global water
water = water + (k - buildings[x])
print(water, "water is ")
del buildings[i:j+1]
print(buildings)
return trapping_rain(buildings)
elif not buildings:
#print("list empty")
return water
#elif buildings[0] == buildings[-1]:
# print("fuck")
# 테스트
#print(trapping_rain([3, 0, 0, 2, 0, 4]))
print(trapping_rain([0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]))
뭔가 이상하다 뭐가 안되는 걸까:
해답:
def trapping_rain(buildings):
# 코드를 작성하세요
water = 0
for i in range( 1, len(buildings)-1):
max_left = max(buildings[:i])
max_right = max(buildings[i:])
print(i,max_left, max_right)
print(buildings[:1])
print(buildings[:2])
# 테스트
#print(trapping_rain([3, 0, 0, 2, 0, 4]))
print(trapping_rain([0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]))
해답 부분에 왼쪽 오른쪽 바운더리 설정하는데서 이상하다
print(buildings[:1]) => [0]
print(buildings[:2]) => [0,1]
???? 이문제로 4 시간 넘게 생각해봤는데 뭔가 많이 잘못됐다
컴퓨터 부수어버리고 싶지만... 침착하게 다시 찾아본다...
a = [1,2,3,4,5]
print(a[2:4])
# 결과 값 : [3, 4]
a [2:4]에서
index 2번째는 포함되고 (3) index 4는 포함이 안된다. (5)
그래서 결과는 index 2 , 3 값이니깐 : 3,4
그럼 다시 위로 가서 building [:1] => index [0]
building [:2] =. index [0], index [1]
그럼 다시 바운더리 설정할 때, max(buildings [:i] => buliding의 맨 처음부터 i-1인 덱스까지.
그래서 답은
def trapping_rain(buildings):
total_water = 0
for i in range( 1, len(buildings)-1):
max_left = max(buildings[:i])
max_right = max(buildings[i:])
upper = min(max_left, max_right)
if buildings[i] > upper :
total_water += 0
else:
total_water = total_water +(upper- buildings[i])
return total_water
print(trapping_rain([3, 0, 0, 2, 0, 4]))
print(trapping_rain([0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]))
2) Node JS
php -> node -> dino?
It let us run js in server :
What Node can solve?
Node can handle the request ,
3) Library vs Framework
https://www.youtube.com/watch?v=t9ccIykXTCM
We call library , Framework call us.
4) JS 기본 문법
- Node.JS 설치
Node JS 자바스크립트 번역기 : 컴퓨터에서 웹브라우저가 아닌 곳에서도 자바스크립트를 해석하고 결과물을 확인할 수 있다.
a++ 는 기존의 값을 가지고 이후에 +1
++a는 기존의 값에서 +1을 가진다??
아직도 먼 소린지 모르지만... 일단 궁금한 것 :
cmd + /. : multiple selected comment
'IT > Bootcamp 항해99' 카테고리의 다른 글
[항해99] 21일차 Node JS (0) | 2021.06.28 |
---|---|
[항해99] 19일차 주특기 Node.Js (0) | 2021.06.26 |
[항해99] 17일차 알고리즘 (0) | 2021.06.24 |
[항해99] 16일차 알고리즘 , 재귀함수 (0) | 2021.06.22 |
[항해99] 14-15일차 오늘도 알고리즘 (0) | 2021.06.21 |