백준_18870번

정소담·2023년 2월 2일
0

BOJ Short Review

목록 보기
27/44
post-thumbnail

18870번 좌표 압축

같은 수직선 위 좌표들이 주어졌을 때
각 좌표 기준으로 좌표 위치의 숫자가 작은 좌표들의 개수를 출력 하는 문제.
처음에 문제가 이해가 가질 않았다....ㅎㅎ.....
중복된 수 제외하고 작은 숫자가 몇 개인지 출력했다.

엄청난 시간 초과의 늪........

 n = int(input()) 
 lst = list(map(int,input().split())) # 좌표 위치 리스트 화
 lst_set = set(lst) # 중복값 제외
 for x in lst: # 리스트 순회하면서
     cnt = 0
     for y in lst_set: # 중복제외한 리스트 중
         if x > y: # 작은 숫자가 있으면  
             cnt += 1 # 카운트 + 1 을 해주고
     print(cnt,end=' ') # 카운트 숫자를 출력

왜 이렇게 간단하게 생각 했는지ㅎㅎ
당연하게도 시간 초과

 n = int(input()) # 좌표개수
 lst = list(map(int,input().split())) # 좌표 리스트
 for i in lst: # 중복제거하고 오름차순으로 정렬
     print(sorted(set(lst)).index(i),end=' ')
     # 해당 좌표의 인덱스 값을 출력했다.

코드가 짧아진다고 시간이 짧아지는 건 아니다..^^....
난 아직 계산 시간이 어렵다...

 import sys
 input=sys.stdin.readline
 input() # 좌표개수 (파이썬에선 필요없어서 그냥 input() 처리..ㅎㅎ)
 lst = list(map(int,input().split())) # 좌표 리스트
 lst2 = sorted(set(lst)) # 오름차순 중복값제외 리스트
 dic = {} # 빈 딕셔너리 생성
 for i in lst2: # 좌표 : 인덱스 
     dic[i]=lst2.index(i)
 for i in lst: # 좌표리스트의 값을 출력
     print(dic.get(i),end= ' ')

딕셔너리만 만들었을 뿐
딕셔너리를 리스트 순회하면서 '리스트의 요소 : 리스트 요소의 인덱스'로 채워넣었더니 역시나 시간 초과

import sys
input=sys.stdin.readline
input()
lst = list(map(int,input().split()))
lst2 = sorted(set(lst))
dic = {lst2[i] : i for i in range(len(lst2))}
# 길이를 활용해서 숫자로 순회하고
# '리스트의 i위치 요소 : 숫자' 로 딕셔너리 채우기
for i in lst: # 좌표리스트 순회
    print(dic[i],end= ' ') # 딕셔너리의 값 출력

이렇게 겨우 통과 할 수 있었다
요즘 계속 시간 초과와의 싸움이다..
채점중에서 퍼센트가 천천히 올라가면 너무 조마조마 하다.
계산 시간도 금방금방 파악할 수 있는 날이 오길 !

profile
Hi ! I'm newbie :)

0개의 댓글