# 파이썬 알고리즘 인터뷰

35개의 포스트

[알고리즘] 역순 연결 리스트 II

역순 연결 리스트 II리스트에 담아서 필요한 부분만 리버스를 하고 다시 그 리스트를 기반으로 링크드리스트를 만들어도 되겠지만, 그것이 정석 풀이는 아닌듯하여 책의 풀이를 참고 하였다. 어떻게 진행되는지 책의 그림을 통해 이해하는 것이 중요하다.

약 7시간 전
·
0개의 댓글

[알고리즘] 홀짝 연결 리스트

홀짝 연결 리스트홀수 번째 노드와 짝수 번째 노드가 아닌 홀수 값을 가지는 노드와 짝수 값을 가지는 노드로 문제를 잘 못 이해했다.두 칸씩 건너 뛰며 홀수는 홀수 번째 노드끼리만 엮고, 짝수는 짝수 번째끼리만 엮는다. 완성되고 나면 홀수 번째의 마지막과 짝수의 head

약 8시간 전
·
0개의 댓글

[알고리즘] 페어의 노드 스왑

페어의 노드 스왑처음에는 노드 자체를 스왑해야한다는 생각에 사로 잡혀서 값만 바꿀 생각을 하지 못했다.사실 값만 바꾸는 풀이는 정석적인 풀이가 아니다. 노드가 단순한 구조가 아니라면 복잡할 것이다.복잡해 보이지만 그림을 그려가며 이해하면 충분히 따라 갈 수 있다.

약 8시간 전
·
0개의 댓글

[알고리즘] 두 수의 덧셈

두 수의 덧셈두 개의 링크드 리스트를 리스트로 변환해서 숫자로 변환하고, 두 숫자를 더해서 다시 링크드 리스트를 만드는 풀이다.숫자형 리스트를 단일 값으로 병합하기실제 덧셈을 하듯이 뒤에서부터 더해가는 방식이다. 만약 carry가 발생하면 다음 게산에서 그것을 더해준다

약 9시간 전
·
0개의 댓글

[알고리즘] 역순 연결 리스트

역순 연결 리스트주어진 링크드리스트를 순서대로 따라가며 리스트에 숫자들을 저장해 놓는다. 그것을 뒤집어서 거꾸로 링크드리스트를 새로 만든다. 다음 노드 next와 현재 노드 node를 파라미터로 지정한 함수를 계속해서 재귀 호출한다. node.next에는 이전 prev

약 11시간 전
·
0개의 댓글

[알고리즘] 팰린드롬 연결 리스트

팰린드롬 연결 리스트속도가 매우 느리게 나왔다.내 풀이와 마찬가지로 리스트를 이용하지만 초기 조건을 주었고, 또한 비교할 때 앞뒤로 하나씩 빼며 비교하였다.책 풀이 1에서 앞뒤로 뺀다는 점에 착안하여 덱을 쓰면 더욱 효율적이다.

약 15시간 전
·
0개의 댓글

6장 문자열 조작 - 4,5,6

가장 흔한 단어 풀이 리스트 컴프리헨션, counter 객체 리스트에서 자주 사용되는 기법( 비단, 리스트만은 아니긴 합니다. )으로 문자열에서 필요한 부분(데이터)만 추출. 즉, 데이터 클렌징이라 불리는 전처리 작업이 필요하다. 사고과정 문제를 보고 금지된 단어

어제
·
0개의 댓글

6장 문자열 조작 - 1,2,3

풀이1\. 리스트 변환(MY), 2.데크자료형을 이용한 최적한3.슬라이싱 사용=> 정규식으로 불필요한 문자를 필터링( = 데이터 클렌징, 입력값에 대한 전처리작업)islanum 영문자,숫자 여부를 판별하는 함수. 영문자,숫자가 아니라면 Fasle문자열을 조작할때는 항상

어제
·
0개의 댓글

5장 리스트, 딕셔너리

이 페이지의 모든 내용은 저자 박상길 님의 파이썬 알고리즘 인터뷰를 기반으로 정리한 내용임을 밝힙니다.C의 배열 != python의 list ( 사실상, 파이썬은 모든게 객체! )그렇기 때문에 reference 형식을 취하며 이로 인해 부득이하게 속도가 느리다.내부적으

어제
·
0개의 댓글

[알고리즘] 주식을 사고팔기 가장 좋은 시점

주식을 사고팔기 가장 좋은 시점시간초과가 났다. O(n^2)이기 때문이다. O(n)으로 돌면서 지나온 값들에 대해 min_price들을 갱신해준다. 그리고 마찬가지로 현재 가격에서 min_price 를 뺸 값과 profit을 비교해 최대값을 갱신해준다.

어제
·
0개의 댓글

[알고리즘] 자신을 제외한 배열의 곱

자신을 제외한 배열의 곱문제를 보자마자 전체 배열을 다 곱한 수를 구한 다음, 각 배열의 값마다 나눠서 값을 저장하면 되겠다라고 생각했으나 문제 제약 사항에 나누기를 쓰지 말라고 되어있었다.

어제
·
0개의 댓글

[알고리즘] 배열 파티션 I

배열 파티션 Imin을 이용하면 어짜피 가장 작은 값만 남으니 큰 값과 작은 값을 매칭시킬 필요가 없다. 가장 가까운 두 값을 매칭시키는 것이 total을 크게한다. 따라서 정렬을 한다음 두 쌍에서 왼쪽 값이 작으니 왼쪽값을 더하면 된다.

어제
·
0개의 댓글

[알고리즘] 세 수의 합

세 수의 합3중 for 문을 이용한 풀이를 떠올렸으며, 이렇게 풀면 당연히 시간초과가 난다.정렬을 해서 투포인터로 푼다.왼쪽에서부터 하나씩 기준을 잡는다. 하나의 기준을 잡았으니 남은 오른쪽 부분에 대해 left와 right를 잡아서 해결해나간다. 단, 중복되는 요소들

어제
·
0개의 댓글

[알고리즘] 빗물 트래핑

빗물 트래핑예전에 이렇게 풀었지만 새로 푸니 아예 풀지를 못했다.현재 높이가 이전 높이보다 높을 때, 격차만큼 물 높이를 채운다. 이전 높이는 들쑥날쑥하기 때문에, 변곡점을 만날때마다 스택에서 하나씩 꺼내면서 이;전과의 차이만큼 물 높이를 채워 나간다. 백준 탑

어제
·
0개의 댓글

[알고리즘] 두 수의 합

두 수의 합문제를 보자마자 떠오른 풀이 방법은 브루트포스였으나, 책의 풀이가 기억나서 in을 사용했다. 딕셔너리에 키를 숫자로, value를 인덱스로 잡았다.

어제
·
0개의 댓글

[알고리즘] 가장 긴 팰린드롬 부분 문자열

가장 긴 팰린드롬 부분 문자열O(n^2) 방식으로 풀어서 시간 초과가 났다.max 함수를 사용할 때, key를 설정하여 비교 기준을 결정할 수 있다.

2일 전
·
0개의 댓글

[알고리즘] 그룹 애너그램

그룹 애너그램각 단어들을 정렬하여 같으면 애너그램 관계에 있는 것이다. 따라서 정렬한 단어를 키로하고, 원래 단어를 value에 추가하는 방식이다. TypeError: unhashable type: 'list' 가 떴었는데, 딕셔너리의 key는 변경되지 않는 값이 들어

2일 전
·
0개의 댓글

[알고리즘] 가장 흔한 단어

가장 흔한 단어처음에는 그냥 공백을 기준으로 split하고, 정규식을 이용해서 alphanumeric한 것만 딕셔너리에 담고, 그 딕셔너리에서 가장 큰 value를 찾을 때마다 max_word 를 갱신하려했다. 하지만 문제에서 print(mostCommonWord("a

2일 전
·
0개의 댓글

[알고리즘] 로그 파일 재정렬

로그 파일 재정렬풀지 못했다. 그렇게 어려운 문제가 아닌데 지레 겁을 먹었다. 문제를 차근차근 읽자.문자로 구성된 로그가 숫자로 된 로그보다 앞에 와야하므로 로그가 숫자로 된 것인지 문자로 된 것인지 구분해서 저장한다. 문자로 된 로그는 로그의 식별자 뒷 부분을 우선으

2일 전
·
0개의 댓글

[알고리즘] 문자열 뒤집기

문자열 뒤집기리스트의 내장함수를 사용했다.투포인터를 이용한 풀이다

2일 전
·
0개의 댓글