반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Graph
- 코딩테스트
- R
- uncertainty
- dropout
- 텍스트마이닝
- pandas
- 논문리뷰
- pytorch
- 리눅스
- 알고리즘
- PYTHON
- 백준
- 베이지안
- VAE
- 파이썬
- 데이터분석
- 텍스트분석
- AI
- bayesian
- 강화학습
- 불확실성
- selenium
- 우분투
- 크롤링
- 빅데이터
- Crawling
- YarinGal
- GNN
- DATA
Archives
- Today
- Total
끄적거림
[HackerRank] 양말 짝 맞추기 본문
728x90
반응형
문제
요약하면, 양말색(숫자 리스트)별로 양말 리스트가 주어졌을 때, 색이 짝을 이루는 양말의 갯수를 반환하는 문제이다.
코드
# import numpy as np
import collections as co
"""
- n : 주어지는 양말의 갯수
- ar : 실제 양말의 색상과 양말들
"""
# method 1 : deque
def sockMerchant(n, ar):
dq = co.deque([])
ndq = 0
res = 0
append_flag = False
for i in range(n):
if ndq == 0: # deque init
dq.append(ar[i])
ndq += 1
print(dq)
else:
for j in range(ndq):
if dq[j] == ar[i]: # 양말 짝을 맞췄을 때
res += 1
ndq -= 1
dq.remove(ar[i])
append_flag = True
print(dq)
break
if append_flag:
append_flag = False
continue
dq.append(ar[i])
ndq += 1
print(dq)
return res
# method 2 : sorted list & binary search
if __name__ == '__main__':
n = 9
ar = [10, 20, 20, 10, 10, 30, 50, 10, 20]
result = sockMerchant(n, ar)
print(result)
결과 : 주어진 테스트 케이스 모두 통과!
해설 :
- stack과 queue의 합친 자료구조인 collections package의 deque를 이용
- 일종의 컴파일러의 괄호짝 맞추기 느낌으로 풀음
- deque list에 양말 list의 값을 하나씩 append하면서 deque list를 순회하면서 양말 짝을 찾을 수 있는지를 확인.
- deque를 이용한 풀이는 $ O(n^2) $의 시간 복잡도를 소모하기 때문에 time-out을 예상했지만, 이상하게 성공.
- 아마 주어진 수와 list크기가 크지 않아서인 것 같다.
두 번째로 고안한 방법은
- sorted list를 만들어서 값을 하나씩 넣을 때마다, sort를 시킨다.
- 이후 binary search로 해당 값을 찾아내고, 해당 값을 제거하는 알고리즘을 생각했다.
- 해보진 않았지만, 첫번째 풀이보다는 시간 복잡도가 낮을 것 같았다.
728x90
반응형
'Python > 알고리즘(코딩테스트)' 카테고리의 다른 글
[HackerRank] Jumping on the Clouds (0) | 2022.06.28 |
---|---|
[HackerRank] Counting Valleys (0) | 2022.06.28 |
백준 2293번 (0) | 2022.06.26 |
[BaekJoon] 백준 1463번 풀이(1로 만들기) in Python (0) | 2020.04.03 |
[BaekJoon]백준 7576번(토마토) 풀이 in python3 (0) | 2020.03.27 |
Comments