목록알고리즘 (5)
나의 발자취
Sliding Window 알고리즘이란? 창문을 한쪽으로 밀면서 답을 찾는 것처럼 보여서 이름이 슬라이딩 윈도우 알고리즘 이다. 아래와 같이 배열이 주어지고, “연속적"으로 요소들을 짝지어서 비교하거나 사용할 때 → 슬라이딩 윈도우 알고리즘을 사용할 수 있다. 연속적이라는 말은 위의 메모 동그라미 1번에서 적어놨듯이 단순히 배열을 정렬하여 반환하는 식으로 해결할 수 없다, 왜냐하면 우리는 주어진 배열 안에서 “연속적"인 정수들의 관계에 영향을 받으며 문제를 풀어야 하기에. Given an array as input, extract the pair of contiguous integers that have the highest sum of all pairs. Return the pair as an arra..
Closed Addressing Closed Addressing, 폐쇄주소방식은 키에 대한 해시값에 대응되는 곳에만 키를 저장한다. 충돌이 발생한 키들은 한 위치에 모아 저장된다. 이를 구현하는 가장 대표적인 방법이 체이닝(Chaining)이다. 체이닝은 해시테이블의 크기인 M개의 단순연결리스트를 가지며, 키를 해시값에 대응되는 연결리스트에 저장하는 해시방식이다. 체이닝은 연결리스트로 구현되어 레퍼런스가 차지하는 공간이 추가로 필요하지만 오픈어드레싱처럼 해시테이블의 empty 원소를 찾는 오버헤드가 없고, 군집화 현상이 없으며, 구현이 간결하여 실제로 가장 많이 이용되는 해시방법이다. 테이블 크기인 M이 항목 수 N보다 너무 크면(M>>>N) 많은 연결리스트들이 empty가 되고, 그 반대로 너무 작으면(M
6기 부스트캠프의 문제풀이가 올라왔다. (해답 : https://blog.naver.com/PostView.naver?blogId=boostcamp_official&logNo=222388429782&parentCategoryNo=&categoryNo=20&viewDate=&isShowPopularPosts=false&from=menu) 하지만 파이썬만 답이 없어서 파이썬으로 풀어보기로 했다. 내가 푼 해답은 아래와 같다. 흠... 창피하다.ㅎㅎ import collections def solution(arr) : # 리스트의 순서를 유지하고, 원소의 중복 개수를 카운트하는 딕셔너리 생성 counter = dict(collections.OrderedDict(collections.Counter(arr))) ..
이 문제는... for문과 리스트, join함수를 써야한다. 아..리스트에 하나씩 문자를 추가하는 것이 비효율적인 것 같긴한데 일단 이렇게 테케를 통과했다. 하지만 문자열을 다룰때는 슬라이싱이 엄청나게 효율적이므로 되도록이면 리스트가 아닌 슬라이싱으로 풀어야한다는거. 나의 해답 def solution(n): answer = [] for i in range(n): if i % 2 == 0: answer.append("수") else: answer.append("박") return ''.join(answer) 리스트로 문자열을 다룰 때는 ''.join(리스트 이름) 을 사용하여 처리한다는것..정말 유용하다. 비슷한 해답 def water_melon(n): wm="" for i in range(n): if (..