-
[백준 18870 Python] 좌표 압축 - ItisFutureAlgorithm/Baekjoon 2022. 9. 11. 22:29
내가 쓴 정답 코드
n = int(input()) n_list = list(map(int,input().split())) n_dic = {i:0 for i in n_list} n_sorted_list = sorted(n_list) cnt = 0 prev = n_sorted_list[0] for i in n_sorted_list: if i == prev: n_dic[i] = cnt else: cnt+=1 n_dic[i] = cnt prev = i for idx,i in enumerate(n_list): n_list[idx] = n_dic[i] print(*n_list)
풀이 아이디어
1. 제일 작은 숫자가 0 임을 파악
2. 오름차순으로 +1씩
2-1. 주어진 값에 대하는 순서를 딕셔너리에 업데이트
3. 숫자 리스트에 각 숫자를 순서로 대체
여담
이 풀이와 대부분의 풀이에서 1초 내외의 시간이 경과됐다.
예전에 검색을 해봤지만 정확히 기억이 안 나서 파이썬은 1초에 몇 번을 계산하는지 궁금해져서 검색해보니
2천만 번이라 하여 내 코드에서 어느 정도의 계산을 했나 궁금했다.
sorted()는 병합 정렬을 기반으로 만들어졌고 시간 복잡도는 O(NlogN)이다.
N번 반복하는 코드들은 4번 쓰여졌다.
문제에서 최대 백만 개의 데이터가 올 수 있다는 점을 생각하면
내 코드에서 최대 연산 횟수는 약 천만번이다.
따라서 1초라는 결과에 납득을 했다.
sorted()함수에 key값 활용하여 유용하게 써먹어야겠다.
https://devmath.tistory.com/23
[파이썬 Python] 정렬 라이브러리 / sorted() , sort() , key 값
sorted() 파이썬은 기본 정렬 라이브러리인 sorted() 함수를 제공한다. sorted() 는 병합 정렬을 기반으로 만들어졌는데, 병합 정렬은 일반적으로 퀵 정렬보다 느리지만 최악의 경우에도 시간 복잡도 O(
devmath.tistory.com
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준 1158 Python] 요세푸스 문제 파이썬 - ItisFuture (0) 2022.09.13 [백준 9020번 python] 골드 바흐의 추측 (0) 2022.09.05 백준 1920번 수 찾기 파이썬 python (0) 2022.04.29 백준 1526번 python 가장 큰 금민수 (0) 2022.04.19 [백준 파이썬 1259번] 팰린드롬수 알고리즘 python (0) 2022.04.14