▶ 코드

 

N, k = map(int, input().split(' '))

lst = [0]*N
for i in range(N):
    lst[i] = int(input()) # [1,5,10]

lst = sorted(lst, reverse=True)
#print(lst)
      
c = 0
while k > 0:
  for i in range(len(lst)):
    if k >= lst[i]:
        q = k//lst[i]
        k -= q * lst[i]
        c += q
print(c)

'코테 기본개념 > 그리디' 카테고리의 다른 글

[백준 1946] 신입 사원  (0) 2020.05.05
[백준 2875] 대회 or 인턴  (0) 2020.05.05
[백준 10610] 30  (0) 2020.05.05
[백준 1931] 회의실배정  (0) 2020.05.03
[백준 5585] 거스름돈  (0) 2020.05.03
[백준 11399] ATM  (0) 2020.05.03

▶ 코드

# 3 1 4 3 2
# 1 2 3 3 4 
# 1 3 6 9 13 -> 32

N = int(input())
lst = list(map(int, input().split(' ')))
#print(lst)
lst.sort()
#print(lst)

s = 0
for i in range(len(lst)):
    s += sum(lst[:i+1])
print(s)

'코테 기본개념 > 그리디' 카테고리의 다른 글

[백준 1946] 신입 사원  (0) 2020.05.05
[백준 2875] 대회 or 인턴  (0) 2020.05.05
[백준 10610] 30  (0) 2020.05.05
[백준 1931] 회의실배정  (0) 2020.05.03
[백준 5585] 거스름돈  (0) 2020.05.03
[백준 11047] 동전 0  (0) 2020.05.03

 

▶ 코드

 

# [ 1, 1, 2, 3, 5, 8, 13 ... ]
n = int(input())

memo = [0]*91

def bnr(n):
    if n==1:
        return 1
    if n==2:
        return 1
    if memo[n] != 0:
        return memo[n]
    else:
        memo[n] = bnr(n-1)+bnr(n-2)
        return memo[n]

print(bnr(n))

▶ 코드

 

n = int(input())
p = []

for i in range(n):
    p.append(list(map(int, input().split())))

for i in range(1, len(p)):
    p[i][0] += min(p[i-1][1], p[i-1][2])
    p[i][1] += min(p[i-1][0], p[i-1][2])
    p[i][2] += min(p[i-1][0], p[i-1][1])

print(min(p[-1][0], p[-1][1], p[-1][2]))


''' 메모리 초과됐던 코드 '''
'''
N = int(input())

temp = []
prev = []
for i in range(N):
    if i == 0:
        temp = list(map(int, input().split())) # [26, 40, 88]
    else:
        temp2 = []
        input_num = list(map(int, input().split())) # [49, 60, 57]
        

        if i == 1:
            for j in range(3):
                for k in range(3):
                    if j != k:
                        temp2.append( [temp[j], input_num[k]] ) 
            temp = temp2
            
        else:
            max_value = 0
            for j in range(len(temp)): # 0~5
                index = prev.index(temp[j][1])
                #print('index = ', index)
                
                for k in range(3):
                    if k != index:
                        temp2.append( [ sum(temp[j]), input_num[k] ] )
            temp = temp2

        prev = input_num
        
    print(i, temp)
    print()


for i in range(len(temp)):
    temp[i] = sum(temp[i])

print(min(temp))

'''

▶ 코드

 

# 1, 2, 3, 5, 8, 13, 21, 34, 55 ...

N = int(input())

memo = [0]*1001

def fib(N):
    if N == 1:
        return 1
    if N == 2:
        return 2
    if memo[N] != 0:
        return memo[N]
    else:
        memo[N] = fib(N-1) + fib(N-2)
        return memo[N]

print( fib(N) % 10007 )

'■코테 중요개념 > 다이나믹 프로그래밍(DP)' 카테고리의 다른 글

[백준 2193] 이친수  (0) 2020.04.30
[백준 1149] RGB거리  (0) 2020.04.30
[백준 9095] 1, 2, 3 더하기  (0) 2020.04.26
[백준 1463] 1로 만들기  (0) 2020.04.26
[백준 9461] 파도반 수열  (0) 2020.04.26
[백준 1932] 정수 삼각형  (0) 2020.04.26

 

 코드

 

# N을 만드는 방법 = [1개, 2개, 4개, 7개, 13개...]
# 7은 4+2+1
# 13은 7+4+2

T = int(input())

memo = [0]*11

def onetwothree(N): # N = 1~10
    if N == 1:
        return 1
    if N == 2:
        return 2
    if N == 3:
        return 4
    
    if memo[N] != 0:
        return memo[N]
    else:
        memo[N] = onetwothree(N-1)+onetwothree(N-2)+onetwothree(N-3)
        return memo[N]

for _ in range(T):
    N = int(input())
    print( onetwothree(N) )

'■코테 중요개념 > 다이나믹 프로그래밍(DP)' 카테고리의 다른 글

[백준 2193] 이친수  (0) 2020.04.30
[백준 1149] RGB거리  (0) 2020.04.30
[백준 11726] 2xn 타일링  (0) 2020.04.30
[백준 1463] 1로 만들기  (0) 2020.04.26
[백준 9461] 파도반 수열  (0) 2020.04.26
[백준 1932] 정수 삼각형  (0) 2020.04.26

 

 코드

트리 구조

N = int(input())

if N == 1:
    print(0)
else:
    stage = []		# stage로 트리구조를 표현 
    stage.append([N])

    flag = False

    i = 0

    while (flag==False):
        temp = []
        for a in stage[i]:
            if a % 3 == 0:
                temp.append(a//3)
            if a % 2 == 0:
                temp.append(a//2)
            if a-1 not in temp:
                temp.append(a-1)

            if 1 in temp:	# 1나오는 순간 중지 시킴
                flag = True
                
        stage.append(temp)
        i += 1

    #print(stage)
    print(i)

'■코테 중요개념 > 다이나믹 프로그래밍(DP)' 카테고리의 다른 글

[백준 2193] 이친수  (0) 2020.04.30
[백준 1149] RGB거리  (0) 2020.04.30
[백준 11726] 2xn 타일링  (0) 2020.04.30
[백준 9095] 1, 2, 3 더하기  (0) 2020.04.26
[백준 9461] 파도반 수열  (0) 2020.04.26
[백준 1932] 정수 삼각형  (0) 2020.04.26

 

 코드

 

T = int(input())

memo = [0] * 101

def pdb(N):
    if (N == 1):
        return 1
    if (N == 2):
        return 1
    if (N == 3):
        return 1
    if (memo[N] != 0):
        return memo[N]
    else:
        memo[N] = pdb(N-2) + pdb(N-3)
        return memo[N]

for _ in range(T):
    N = int(input())
    print(pdb(N))



''' 시간초과 
T = int(input())

def pdb(N):
    if (N == 1):
        return 1
    if (N == 2):
        return 1
    if (N == 3):
        return 1
    return pdb(N-2)+pdb(N-3)

for _ in range(T):
    N = int(input())
    print(pdb(N))
'''

'■코테 중요개념 > 다이나믹 프로그래밍(DP)' 카테고리의 다른 글

[백준 2193] 이친수  (0) 2020.04.30
[백준 1149] RGB거리  (0) 2020.04.30
[백준 11726] 2xn 타일링  (0) 2020.04.30
[백준 9095] 1, 2, 3 더하기  (0) 2020.04.26
[백준 1463] 1로 만들기  (0) 2020.04.26
[백준 1932] 정수 삼각형  (0) 2020.04.26

 


코드

 

# 밑에서부터 더해 올라가서 최대합을 구한다 

n = int(input())

num = []
for i in range(n):
    num.append(list(map(int, input().split())))

#print(num)

for i in range(n-1, 0, -1):
    for j in range(i):
        temp_max = max(num[i][j], num[i][j+1])
        num[i-1][j] += temp_max

print(num[0][0])

 

 

 

 

'■코테 중요개념 > 다이나믹 프로그래밍(DP)' 카테고리의 다른 글

[백준 2193] 이친수  (0) 2020.04.30
[백준 1149] RGB거리  (0) 2020.04.30
[백준 11726] 2xn 타일링  (0) 2020.04.30
[백준 9095] 1, 2, 3 더하기  (0) 2020.04.26
[백준 1463] 1로 만들기  (0) 2020.04.26
[백준 9461] 파도반 수열  (0) 2020.04.26



'웹 프로그래밍 > Javascript' 카테고리의 다른 글

[JS] call by value, call by reference  (0) 2020.02.12
[JS] 팩토리 패턴 & 프로토타입  (0) 2020.02.12
[JS] 참조  (0) 2020.02.12
[JS] 클로저  (0) 2020.02.08
[JS] 정적 스코핑 (렉시컬 스코핑)  (0) 2020.02.08
[JS] 스코프  (0) 2020.02.08

자바스크립트에서는 call by reference 가 존재하지 않는다.






객체 속성 수정 시에는 참조이지만, 


객체 자체를 수정할 시에는 참조 관계가 깨진다.


'웹 프로그래밍 > Javascript' 카테고리의 다른 글

[JS] 생성자와 new  (0) 2020.02.12
[JS] 팩토리 패턴 & 프로토타입  (0) 2020.02.12
[JS] 참조  (0) 2020.02.12
[JS] 클로저  (0) 2020.02.08
[JS] 정적 스코핑 (렉시컬 스코핑)  (0) 2020.02.08
[JS] 스코프  (0) 2020.02.08

프로토타입 이란 ?    객체들 간의 공유된 속성  





그렇다면, 프로토타입을 왜 쓰는걸까 ? 


정답: 코드의 중복 작성을 막기위해 





위쪽의 코드에서 카드.__proto__ = 프로토타입은 .. 앞서 배웠던 '참조' 관계가 된다. 


이를 이용해 한번에 속성들을 바꿀 수 있게되는것이다.







그러나, 공식문서 JS 표준에서는 __proto__ 쓰는것을 권장하지 않음 . (실무에서는 쓰면 안됨)


>> Object.create() 속성을 이용해서 프로토타입을 추가하자.






정리







'웹 프로그래밍 > Javascript' 카테고리의 다른 글

[JS] 생성자와 new  (0) 2020.02.12
[JS] call by value, call by reference  (0) 2020.02.12
[JS] 참조  (0) 2020.02.12
[JS] 클로저  (0) 2020.02.08
[JS] 정적 스코핑 (렉시컬 스코핑)  (0) 2020.02.08
[JS] 스코프  (0) 2020.02.08

1. 숫자, 문자, bool은 대입해도 참조관계가 아니다. (복사가 된다)





2. 객체 (일반객체, 배열, 함수) : 객체는 대입하면 참조관계가 된다.


(객체)


(배열)


(함수)




3. 참조를 피하기 위한 복사예시 (forEach 사용)




4. 참조된 경우, true라는 결과도출 




5. forEach를 쓰는것은 사실은 불완전한 복사 




왜? 불완전한 복사일까 ?




6. 복사방법 총 정리








'웹 프로그래밍 > Javascript' 카테고리의 다른 글

[JS] 생성자와 new  (0) 2020.02.12
[JS] call by value, call by reference  (0) 2020.02.12
[JS] 팩토리 패턴 & 프로토타입  (0) 2020.02.12
[JS] 클로저  (0) 2020.02.08
[JS] 정적 스코핑 (렉시컬 스코핑)  (0) 2020.02.08
[JS] 스코프  (0) 2020.02.08

함수와 함수가 접근할 수 있는 스코프일때, 클로저 관계를 맺는다.

 

 

 

 

 

 

 

 

 

▶ 해결 방법1. 새로운 함수 스코프로 해결하기

 

 

 

 

 

▶ 해결 방법2. 블록 스코프(let)로 해결하기

 

'웹 프로그래밍 > Javascript' 카테고리의 다른 글

[JS] 생성자와 new  (0) 2020.02.12
[JS] call by value, call by reference  (0) 2020.02.12
[JS] 팩토리 패턴 & 프로토타입  (0) 2020.02.12
[JS] 참조  (0) 2020.02.12
[JS] 정적 스코핑 (렉시컬 스코핑)  (0) 2020.02.08
[JS] 스코프  (0) 2020.02.08













- 코드가 적힌 순간 스코프가 정해진다. 이것을 렉시컬(정적) 스코프 라고함.

- function 선언도 스코프 적용을 받는다. 




'웹 프로그래밍 > Javascript' 카테고리의 다른 글

[JS] 생성자와 new  (0) 2020.02.12
[JS] call by value, call by reference  (0) 2020.02.12
[JS] 팩토리 패턴 & 프로토타입  (0) 2020.02.12
[JS] 참조  (0) 2020.02.12
[JS] 클로저  (0) 2020.02.08
[JS] 스코프  (0) 2020.02.08











- var(변수)은 function을 벗어나서 쓰일 수 없다.

- function의 매개변수 역시 var취급 

'웹 프로그래밍 > Javascript' 카테고리의 다른 글

[JS] 생성자와 new  (0) 2020.02.12
[JS] call by value, call by reference  (0) 2020.02.12
[JS] 팩토리 패턴 & 프로토타입  (0) 2020.02.12
[JS] 참조  (0) 2020.02.12
[JS] 클로저  (0) 2020.02.08
[JS] 정적 스코핑 (렉시컬 스코핑)  (0) 2020.02.08

ex)

String temp = "A.B.C.D";

String[] arr = temp.split('.');


[오류] the method split(string) in the type string is not applicable for the arguments (char)




해결 :         '.'  ->  "." 




파이썬 에서는 '  와  " 이 동일하게 쓰이지만..

자바 에서는 '로 enclosed 된것은 character literals 이고, "로 enclosed 된것은 string literals 이다.



( 출처 : https://soooprmx.tistory.com/entry/%EB%A6%AC%EC%8A%A4%ED%8A%B8%EC%97%90%EC%84%9C-%EC%A4%91%EB%B3%B5%EB%90%9C-%EC%9B%90%EC%86%8C%EB%A5%BC-%EC%A0%9C%EA%B1%B0%ED%95%98%EA%B8%B0 )

'Python > etc' 카테고리의 다른 글

파이썬 튜플,리스트,딕셔너리,집합의 인덱싱 및 정렬  (0) 2019.09.28

(용어 : mutable은 값이 변한다는 뜻이고, immutable은 값이 변하지 않는다는 의미이다.)



1. 튜플


● tuple(튜플)은 불변한 순서가 있는 객체의 집합입니다.

● list형과 비슷하지만 한 번 생성되면 값을 변경할 수 없습니다.

● list와 마찬가지로 다양한 타입이 함께 포함될 수 있습니다.


튜플의 기본 사용법(선언, 인덱싱) : https://wikidocs.net/16042


* 리스트에서 튜플 원소 추가

>>> lst = []

>>> lst.append( (1, 2) )

>>> lst.append( (2, 3) )

>>> lst

[ (1, 2), (2, 3) ]


* 정렬

example_tuples = [ ('A', 3, 'a'), ('B', 1, 'b'), ('C', 2, 'c') ]  # 플 원소로 이루어진 리스트
# 특정 인덱스로 오름차순 정렬 example_tuples.sort(key = lambda element : element[1])

(출처 : https://twpower.github.io/118-sort-list-elements-by-using-key)





2. 리스트


* 리스트에 원소 삽입할때, 주의할점 

>>> lst = []

>>> lst.append(1, 2)       -> 불가능

>>> lst.append(1)

>>> lst.append(2)


* 정렬

example_list = ['나는', '파이썬을', '잘하고', 싶다']

# 길이순으로 내림차순 정렬
example_list.sort(key = len, reverse = True)

example_list2 = ['a', 'python', 'ab', 'accc', 'b']


# 길이순으로 정렬하면서, 같은 길이에서는 알파벳 순으로 정렬

example_list2 = sorted(example_list2, key = lambda x: (len(x), x))





3. 딕셔너리


>>> dic = {} 


● 딕셔너리 타입은 immutable한 키(key)와 mutable한 값(value)으로 맵핑되어 있는 순서가 없는 집합입니다.

● 값은 중복될 수 있지만, 키가 중복되면 마지막 값으로 덮어씌워집니다. ★★★

● 순서가 없기 때문에 인덱스로는 접근할수 없고, 키로 접근 할 수 있습니다.

● mutable 한 객체이므로 키로 접근하여 값을 변경할 수 있습니다.

● 새로운 키와 값을 아래와 같이 추가할 수 있습니다.


딕셔너리 선언 & 추가 & 변환 & For문 : https://wikidocs.net/16043


* 정렬

dic = { 'a': 7, 'bc': 5, 'ba': 5 }  
# key값으로 오름차순 정렬 sdic = sorted(dic.items()) # items() 함수를 호출하면, key-value쌍이 tuple로 구성된 리스트가 리턴
>>> [('a': 7), ('ba': 5), ('bc': 5)]

import operator


# value값으로 오름차순 정렬

sdic2 = sorted(dic.items(), key = operator.itemgetter(1)) # 1번째 인덱스 기준으로 정렬

>>> [('bc': 5), ('ba': 5), ('a': 7)]


# 1번째 인덱스 기준으로 정렬후, 같은 값이 나온다면 0번째 인덱스 기준

sdict3 = sorted(dic.items(), key = operator.itemgetter(1, 0))

>>> [('ba': 5), ('bc': 5), ('a': 7)]




4. 집합 


 >>> s = set()


● 순서가 없고, 집합안에서는 unique한 값을 가집니다.

● 그리고 mutable 객체입니다.

● 중괄호를 사용하는 것은 dictionary와 비슷하지만, key가 없습니다. 값만 존재합니다.


집합 선언 & 추가 : https://wikidocs.net/16044


'Python > etc' 카테고리의 다른 글

리스트 중복 원소 제거방법 (순서 유지)  (0) 2019.11.01



파이썬 3.7에서는 import Error가 나서 한 2~3 시간은 애를 먹었다...


파이참(PyCharm)의 Project interpreter 에서 

1)'BeautifulSoup4'는 깔리지만 깔아도 import를 할 수 없었고,

2)'BeautifulSoup'는 애초에 깔리지도 않았다.

3)'bs4' 를 깔아도 import 할 수 없었다...


도저히 해결방법을 모르겠어서 아나콘다도 지우고, 기존의 파이썬 3.7도 지우고, 파이썬 3.6을 다시다운 받았다..



결국

파이썬 3.6을 다운받은 후...


(cmd)                                                                                           

$> python -m pip install bs4                                                           

                                                                                                  

(IDE)                                                                                            

from bs4 import BeautifulSoup        -> 대소문자를 꼭 구별해주어야한다. 



이렇게만 해주면 정상적으로 작동한다...