알고리듬(7)
-
[단상] 코드 리뷰를 마치고 (+python연습)
XOR / AND 연산자 문제를 다시 풀어본 후 아침에 어제 밤 대회에 참석하여 풀지 못한 XOR과 관련된 4번 문제를 다시 천천히 풀어보고 많은 생각을 하게 되었다. 특히 가끔 기회가 있을 때마다 고등학생들의 수학을 가르치면서 (초등학생 때 배워야 하는 더하기/곱하기의 교환/결합 법칙을 잘 모르는 학생들에게) 교만하지 않았나 하는 반성도 했다. 내가 짠 코드가 O(N * N)의 속도로 for-loop 의 순환을 돌면서 메모리 초과와 TLE(Time Limit Exceeded)에 걸려서 결국은 대회가 끝나고 다른 사람의 코드들을 분석하면서 나의 실수와 부족한 점들을 찾았다. 어제 대회 직후에는 reduce / xor 과 같은 간단한 함수를 못 찾아서 놓쳤다고 생각했는데, 오늘 아침에서야 reduce 를 ..
2021.04.19 -
[문제] 3가지 조건을 만족하는 문자열 변경
Leetcode 의 225회 주간 대회 (Weekly Contest 225, Q2) 2번 문제이다. leetcode.com/problems/change-minimum-characters-to-satisfy-one-of-three-conditions/ 개인적으로 아마추어의 수학 실력을 가지고 소프트웨어 엔지니어로 먹고산 지 20년이 되었다. 20년이 되고 나니.. 알고리듬과 수학의 유사한 부분과 차이.. 그리고 어떻게 하면 알고리듬 실력을 향상 시킬 수 있을 지 이해하는 것 같다. 특히 이러한 문제를 보고... 주어진 제한 시간 내에서 이런 아이디어를 만들어서 코드까지 돌려서 통과할 수 있는 사람은 몇 안된다고 생각한다. 왜냐하면.. 이러한 높은 난이도의 문제를 쉽게 해결하는 많은 고수들의 답안들을 자세히..
2021.01.27 -
[문제후기] leetcode-1647
이 문제는 214 주간 대회의 2번째 문제이다. 문제의 요구사항 문제의 요구사항은 그다지 좋은 편이 아니고, 설명도 친절하지 않다. 하지만 문제를 푸는 과정에서 필요한 아이디어는 매우 참신한 착안이 필요한 편이다. 하나의 문자열에 있는 알파벳 문자 별로 나타나는 회수 중 같은 회수가 없도록 제거해야 한다. 이때 제거해야하는 문자 수를 최소화 하는 회수를 출력하는 문제이다. 1647. Minimum Deletions to Make Character Frequencies Unique A string s is called good if there are no two different characters in s that have the same frequency. Given a string s, return ..
2020.11.08 -
Fenwick 알고리듬(3)
Index 추적 예제 (2) 앞에서 설명한 이진수 계산 절차 방법이 충분히 익숙하지 않을 것이라 생각하여 조금 더 연습을 해보자. 위의 예는 각각 다른 index를 변경한 경우이다. 좌측의 트리에서는 3번 (원래 배열 원소 2번)이 6에서 10으로 바뀐 경우이고, 우측의 트리는 1번 (원래 배열 원소 0번)이 3에서 4로 변경된 경우이다. 첫번째의 예는 3번에서 시작하여 4번을 정확하게 변경하고 8번에서 끝나야 하는 경우(3번 -> 4번 -> 8번)이다. 우측의 두번째 예는 1번 -> 2번 -> 4번 -> 8번으로 변경이 완료되면 된다. 우리가 정확하게 이해를 해야하는 부분은 "(같은 부모 노드에 해당하는 4번 인덱스 아래 각각 분리되어 존재하는) 2번과 3번 인덱스가 어떻게 (동일한) 부모 노드 4번을..
2020.09.18 -
Fenwick 알고리듬(2)
Binary Indexed Tree 구조 앞에서 살펴본 테이블로 표시된 Fenwick 을 왜 Binary Indexed Tree 구조라고 부르는지 살펴볼 시간이다. 여기서도 0번 index에 해당하는 원소는 큰 의미가 없다. 살펴볼 것은 각각의 푸른 색 원소들은 모두 마지막 노드에 속해있고, (바로 앞의 원소의 값과 자신의 값의 부분합을 가지고 있는) 녹색의 원소는 그 푸른색의 원소만을 자녀 노드로 구성하고 있다. 아래의 구조 내에서 처음 언급한 2개의 Operation이 어떻게 움직이는 지 다시 한번 살펴보자. 1) 부분 합을 가져와야 하는 경우 : Sum 만약 최초 배열의 0번부터 5번까지의 합을 가져와야 하는 경우라면, Fenwick 배열에서는 1번부터 6번까지의 배열 내의 값들의 합을 가져오면 된..
2020.09.14 -
Fenwick 알고리듬(1)
Fenwick 알고리듬 (BIT Algorithm) - 시작 이 알고리듬은 다른 이름으로는 BIT(Binary Indexed Tree) 알고리듬이라고 하는데, 1994년 뉴질랜드의 Auckland 대학 교수였던 펜윅(Peter Fenwick) 교수에 의하여 발표되었다. 개인적으로 이 알고리듬을 처음 이해하는데 다른 알고리듬보다는 시간이 더 걸렸던 기억이 난다. 전체 그림을 이해하고 나면 별 문제가 없지만, 처음에는 구체적인 몇 가지 논리 흐름들은 스스로 따라가야만 쉽게 이해되는 부분이 있다. 나 역시 다른 유투버들의 설명을 10개 가량을 시청하고 그 중 한두 개는 집중적으로 보았다. 하지만 매우 좋은 내용을 가진 유투브도 일부 있었지만 어떤 것은 한 시간을 넘게 투자하고도 시간만 낭비한 느낌을 받은 것도..
2020.09.13