일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 자바 1676
- ipfs bean
- Java Call By Refernce
- 백준 특정한 최단 경로
- spring mongodb
- java 1238
- kotiln const val
- 익명 객체 @transactional
- Spring ipfs
- go
- 전략 패턴이란
- java 백준 1509
- 자바 백준 팩토리얼 개수
- kotiln functional interface
- java 1509
- 백준 연결요소 자바
- ipfs singletone
- spring mongodb switch
- javav 1676
- kotiln const
- java 팩토리얼 개수
- nodejs rabbitmq
- rabbitmq 싱글톤
- 안정해시
- java 파티
- 백준 2252 줄세우기
- 백준 1504 java
- mongodb lookup
- spring mongoTemplate
- spring mongoTemplate switch
Archives
- Today
- Total
공부 흔적남기기
시간 복잡도 생각 with 백준 10815 숫자카드 본문
728x90
반응형
문제는 간단하다 내가 소유하고 있는 카드들과
존재여부를 확인하고 싶은 카드들을 입력받는다.
범위를 보면 -10000000~10000000 로 int로도 처리 된다.
나는 처음에 생각한게
먼저 단순히 target을 python의 in연산자로 찾으면 O(N)의 시간 복잡도로 찾아지게 되므로 시간초과가 뜰 것같았다.
그래서 리스트에서 값을 찾을 때 O(logN)의 속도로 찾을 수 있는 이분탐색을 사용해서 찾을려고 했다.
근데 멍청하게 O(logN)에서 찾은 애들은 remove를 시켜주겠다는 생각을 했다.
list에서 remove를 해주는 것이 더빠르다고 생각해서 remove를 해주었다.
하지만 일반 적인 생각말고 시간복잡되 관점에서 remove는 찾는 것과 마찬가지로 O(N) 시간복잡도를 가진다.
그래서 O(N logN) 로 시간복잡도가 되어 시간초과가 났다.
remove를 할거면 index로 접근해서 O(1)로 처리했어야 했다.
그래도 이번 기회를 통해 시간복잡도를 좀 더 생각하면서 코테를 준비할 수 있는 기회가 되었다.
def main():
n = int(input())
owns = list(map(int, input().split()))
t = int(input())
targets = list(map(int, input().split()))
owns.sort()
print(*bin_search(owns, targets))
def bin_search(owns: list, targets: list) -> list:
answer = [] # 이분 탐색으로 시간복잡도 O(log N) remove를 포함시키면 시간복잡도 O(N logN)
for target in targets:
start = 0
last = len(owns) - 1
check = True
while start <= last:
middle = (start + last) // 2
if owns[middle] == target:
answer.append(1)
#owns.remove(target) remove 연산 O(N)으로 시간 복잡도 증가함.
check = False
break
elif owns[middle] > target:
last = middle - 1
else:
start = middle + 1
if check:
answer.append(0)
return answer
if __name__ == "__main__":
main()
https://www.acmicpc.net/problem/10815
10815번: 숫자 카드
첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,
www.acmicpc.net
728x90
반응형
'코테 > 백준' 카테고리의 다른 글
[JAVA] 백준 연결요소 11724 (0) | 2024.10.28 |
---|---|
[JAVA] 백준 팩토리얼 0의 개수 1676 (0) | 2024.10.21 |
[JAVA] 백준 베르트랑 공준 4948 (0) | 2022.03.02 |
[JAVA] 백준 설탕배달 2839 (0) | 2022.03.02 |
[JAVA] 백준 달팽이는 올라가고 싶다 2869 (0) | 2022.03.02 |