일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 18111번 마인크래프트 - java 구현
- StringTokenizer
- ac 5430번
- 프로그래머스 java
- 백준 3190번
- 백준 14938번 서강그라운드
- Stack
- dp
- map
- kotlin
- toUpperCase
- HashSet
- 프로그래머스
- 프로그래머스 자바
- 백준 1806번 부분합 java
- 백준 1647번 도시 분할 계획 - java
- hash
- HashMap
- mysql hy000 에러
- 백준 1541
- 백준 2473번 세 용액 - java
- 백준 1197번 최소 스패닝 트리 - java
- 최소 힙 1927
- replace()
- append
- 코틀린기초
- 백준 2467번 용액 자바 - 이분탐색
- Java
- StringBuilder
- 백준 1043번 거짓말 - java 분리 집합
Archives
- Today
- Total
말하는 컴공감자의 텃밭
알고리즘 시간관련 - 시간 제한, 시간 복잡도 본문
728x90
우리는 문제를 풀면서 알고리즘 문제가 어떤 유형의 문제인지 판단해야한다.
그 중 한가지 팁인데 시간제한을 보는것이다.
인풋에 대한 적절한 시간 복잡도
- N의 범위가 500: 시간 복잡도 O(N^3) 이하
- N의 범위가 2,000: 시간 복잡도 O(N^2) 이하
- N의 범위가 100,000: 시간 복잡도 O(N log N) 이하
- N의 범위가 10,000,000: 시간 복잡도 O(N) 이하
- N의 범위가 10,000,000,000: 시간 복잡도 O(log N) 이하
N의 범위가 500 : 시간 복잡도: O(N^3) 이하
- 500^3 = 125,000,000 < 5 * 10^7 (0.5초 안에 실행 가능)
- 예시 알고리즘: 플로이드-워셜, 3중 for 문을 사용하는 알고리즘
N의 범위가 2,000 : 시간 복잡도: O(N^2) 이하
- 2,000^2 = 4,000,000 < 5 * 10^7 (0.5초 안에 실행 가능)
- 예시 알고리즘: 행렬 곱셈, 다익스트라 (인접 행렬로 표현 시)
N의 범위가 100,000 : 시간 복잡도: O(N log N) 이하
- 100,000 * log(100,000) ≈ 100,000 * 17 ≈ 1,700,000 < 5 * 10^7 (0.5초 안에 실행 가능)
- 예시 알고리즘: 병합 정렬, 퀵 정렬, 힙 정렬
N의 범위가 10,000,000 : 시간 복잡도: O(N) 이하
- 10,000,000 < 5 * 10^7 (0.5초 안에 실행 가능)
- 예시 알고리즘: 선형 시간 정렬 (계수 정렬, 기수 정렬), 단순 탐색
N의 범위가 10,000,000,000 : 시간 복잡도: O(log N) 이하
- log(10,000,000,000) ≈ 33 < 5 * 10^7 (0.5초 안에 실행 가능)
- 예시 알고리즘: 이진 탐색, 균형 잡힌 이진 검색 트리 연산
728x90
'백엔드 > Java' 카테고리의 다른 글
최소 신장 트리를 위한 프림, 크루스칼 알고리즘 (1) | 2024.08.28 |
---|---|
Java - Optional<> (0) | 2024.07.04 |
Java clone - 얕은복사 깊은복사 (0) | 2024.02.20 |
Java - BufferedReader, StringTokenizer, BufferedWriter (1) | 2023.12.02 |
Comments