반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- logistic regression
- petal to metal
- Computer Vision
- 파이썬
- neural network
- Regularization
- 딥러닝
- SGD
- OpenGL
- C++
- cs231n
- 머신러닝
- 컴퓨터 비전
- pre-trained
- CNN
- 추천 시스템
- 인공지능
- Vision
- Unsupervised learning
- SVM
- Support Vector Machine
- 신경망
- Kaggle
- 컴퓨터 그래픽스
- 비용함수
- 백준
- 그래픽스
- CPP
- recommender system
- 로지스틱 회귀
Archives
- Today
- Total
kwan's note
백준 11053번 가장 긴 증가하는 부분 수열 (Lis) 파이썬 (python code) 본문
반응형
난이도: 실버2
번호: 11053번
이번 문제는 가장 긴 증가하는 부분수열 LIS를 계산하는 문제이다.
가장 긴 부분수열은 수열중에서 오름차순으로 뽑을 수 있는 수열중 최대 길이를 갖는 수열으로
예시1)
10 20 10 30 20 50 에서 10 20 30 50으로 4
예시2)
10 30 20 30 40 50 80 60 70에서 10 20 30 40 50 60 70 으로 6
예시3)
30 20 10 에서 30 또는 20 또는 10 으로 1
이 된다.
DP로 문제를 해결했는데 그 이유는 어떤 숫자를 선택하였을때 그 숫자가 해당 수열에 포함되는지 알 수 없었기 때문이다. 가장 작은 숫자를 선택하더라도 그 숫자가 수열에 들어간다는 보장을 할 수 없었다.
따라서 첫번째 숫자부터 살펴보면서 그때까지 만들 수 있는 수열의 최대길이를 구하는 방식을 취했다.
10 20 10 30 라는 수열에서 0 0 0 0으로 새로운 llist를 만들고
list[0]=1
list[1]=2
list[2]=2
list[3]=3 이 되도록 프로그래밍하였다.
import sys
N = int(sys.stdin.readline().rstrip())
num = list(map(int,sys.stdin.readline().split()))
lis = [0 for i in range(N)]
for i in range(N):
for j in range(i):
if num[i] > num[j] and lis[i] < lis[j]:
lis[i] = lis[j]
lis[i] += 1
print(max(lis))
반응형
'Algorithm > python' 카테고리의 다른 글
백준 1931번 회의실 배정 파이썬 (python code) (0) | 2021.01.15 |
---|---|
백준 9251번 LCS 파이썬 (python code) (0) | 2021.01.15 |
백준 1149번 RGB거리 파이썬 (python code) (0) | 2021.01.14 |
백준 12865번 평범한 배낭(냅색) 파이썬 (python code) (0) | 2021.01.14 |
백준 1003번 피보나치 파이썬 (python code) (0) | 2021.01.14 |