sys로 input을받을때 , .rstrip()을 붙여주면 자동으로 제거된다.
.split()은 배열형태로 받음에 기억
sys를 input에 하려면, input.split()을 포함해서 작성해야 한다.
input시 마다 이름이 열림에 주의하자.
Set은 ,집합 형태로, 중복이없다
S.add()로 추가한다. S.remove로 제거한다
dict를 초기화 하는 방법도 기억하자.
백준 10816
dict는 hash로 구성되어 삽입 , 정렬, 모든것들이 O(1)이다.
몇개있는지를 찾는법.
NARR을 받아서 -> (list(map(int,sys~~~.split())으로 받은것 하나하나씩을 int로 변경하여 list로 넣을수있따.
그것들을 dictionary에 넣는다.
for i in Narr : if i in cnt : cnt[i] += 1 { 10 :3개있음, 15 :1(한개있음)) 이렇게 .
그 이후
for j in Marr : if j in Cnt : print(Cnt[j]//그 개수! , end = ' ' )
dictionary에 cnt[j](특정 값) += 1 (그 개수)// j= 3 이렇게 저장해두는 방식을 꼭 기억하자 !!
찾기도, 정렬도, 모두 복잡도가 O(1)
SORTED(DICT.ITEMS()로 정렬 가능 (ITEM 값에 따라 )
SET도 가능.
백준 1764번
dict까지 사용했는데 시간 초과가 나왔다.. 왜인지를 찾아봐야 할 것 같다.
** 실수한 부분을 찾았다.
바로 in narr.values를 사용했기 때문이다.
해당은 dictionary의 값들을 대상으로 비교하기 때문에 , 복잡도가 O(1)이 아니라 O(N)이 되어버린다.
앞에서도 썼듯이, KEY를 탐색의 대상으로 설정하는 TIP을 사용하자.
백준 1269
set의 교집합 함수를 몰라서 &를 넣어보았더니, 맞았다! 그래도 정리를 해보려 한다.
|는 합집합으로 쓰인다. (set에는 +가 없음을 당연히 기억하자)
* sys.stdin.readline().split().rstrip()과
* map (int,상기내용)은 반드시 기억하자 . 이를 쓰는 습관을 들이자
* dict은 key를 탐색을 위한 조건으로 두기를 기억하자 .
'코딩테스트' 카테고리의 다른 글
재귀 (0) | 2024.01.21 |
---|---|
Stack, Queue, Deque (0) | 2024.01.11 |
정렬 (1) | 2024.01.01 |
BRUTE FORCE (0) | 2023.12.31 |
일반 식의 알고리즘 (0) | 2023.12.30 |