일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- DFS
- 파이썬 #알고리즘 #코딩테스트 #프로그래머스
- 다이나믹프로그래밍
- PYTHON
- 백준 #알고리즘 #파이썬 #코딩테스트
- 알고리즘
- Dijkstra
- 백준
- react #리액트 #동빈나 #나동빈 #유튜브강의
- 파이썬 #백준 #알고리즘 #코딩테스트
- 자바 #java
- 파이썬
- java #자바 #생활코딩
- java #자바 #나동빈
- BFS
- 투포인터
- 백트랙킹
- 백준 #파이썬 #알고리즘 #코딩테스트
- 프로그래머스
- 다익스트라
- react #리액트 #동빈나
- java #자바
- 프로그래머스 #파이썬 #코딩테스트 #알고리즘
- java #자바 #동빈나
- css #생활코딩 #웹
- dp
- css #웹 #생활코딩
- 재귀
- 프로그래머스 #파이썬 #알고리즘 #코딩테스트
- 코딩테스트
Archives
- Today
- Total
커리까지
[백준] 2352번 반도체 설계 파이썬 본문
728x90
SMALL
문제
반도체를 설계할 때 n개의 포트를 다른 n개의 포트와 연결해야 할 때가 있다.
예를 들어 왼쪽 그림이 n개의 포트와 다른 n개의 포트를 어떻게 연결해야 하는지를 나타낸다. 하지만 이와 같이 연결을 할 경우에는 연결선이 서로 꼬이기 때문에 이와 같이 연결할 수 없다. n개의 포트가 다른 n개의 포트와 어떻게 연결되어야 하는지가 주어졌을 때, 연결선이 서로 꼬이지(겹치지, 교차하지) 않도록 하면서 최대 몇 개까지 연결할 수 있는지를 알아내는 프로그램을 작성하시오
입력
첫째 줄에 정수 n(1 ≤ n ≤ 40,000)이 주어진다. 다음 줄에는 차례로 1번 포트와 연결되어야 하는 포트 번호, 2번 포트와 연결되어야 하는 포트 번호, …, n번 포트와 연결되어야 하는 포트 번호가 주어진다. 이 수들은 1 이상 n 이하이며 서로 같은 수는 없다고 가정하자.
출력
첫째 줄에 최대 연결 개수를 출력한다.
예제 입력 1
6
4 2 6 3 1 5
예제 출력 1
3
제출답안
from bisect import bisect
import sys
input = sys.stdin.readline
n = int(input())
_port = list(map(int, input().split()))
_list = [_port[0]]
for i in range(1, n):
if _port[i] > _list[-1]:
_list.append(_port[i])
else:
_list[bisect(_list, _port[i])] = _port[i]
print(len(_list))
- lts를 이용하면 풀 수 있었다.
- 뒤에 나오는 포트 값들이 미리 담겨져 있는 포트보다 작으면 바꿔준다.
- 크면 포트에 담는다.
- 출력해보면 1,3,5가 나오는데 이건 포트번호와 분리해서 생각하면 된다.
- 최대 길이를 가지는 수열이라고 생각하면 된다.
728x90
LIST
'알고리즘 > 풀이' 카테고리의 다른 글
[백준] 11779번 최소비용구하기2 (0) | 2021.08.18 |
---|---|
[백준] 9431번 파도반 수열 파이썬 (0) | 2021.08.13 |
[백준] 2589번 보물섬 파이썬 (0) | 2021.08.05 |
[백준] 4963번 섬의개수 파이썬 (0) | 2021.07.31 |
[백준] 6603번 로또 파이썬 (0) | 2021.07.28 |
Comments