[항해99] 18일차 알고리즘

IT/Bootcamp 항해99|2021. 6. 25. 09:06

 


항해 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을 가진다??

 

아직도 먼 소린지 모르지만... 일단 궁금한 것 : 

http://yongho-coding.com/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-a%EC%99%80-a%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90/

 

자바스크립트 a++와 ++a의 차이점

자바스크립트 a++와 ++a의 차이점 - 용호코딩 Javascript 프로그래머를 꿈꾸는 현직 퍼블리셔의 코딩일기 / yongho-coding.com / javascript

yongho-coding.com

 

cmd + /. : multiple selected comment

반응형

댓글()