Two pointer technique는 다음과 같은 상황에서 사용한다. 예를 들어, array를 reverse하는 경우, 한 포인터는 맨 앞에서, 한 포인터는 맨 뒤에서 시작해서 하나하나 바꿔나가면 된다. 파이썬은 reverse()가 있긴 하다. 이런 식으로 두 포인터의 속도를 다르게 하는 방법도 있다. 예를 들어, 리스트의 중간의 element를 가져오고 싶다면 한 포인터는 한 칸씩 가도록, 한 포인터는 두 칸씩 가도록 해서 속도가 더 빠른 포인터가 끝에 도달할 때, 속도가 느린 포인터는 중간 element를 가져올 것이다. 또한, 한 포인터는 한 칸 먼저 빨리 시작시키고, 두 번째 포인터는 한 칸 느리게 시작시키면서 앞 뒤를 비교하는 방법도 있을 것이다. *이 테크닉은 주로 sorted array에..
*Python에는 find() 함수를 이용할 수 있다!*find() 함수는 그 string을 찾아주고 처음으로 등장하는 인덱스 하나만을 리턴하는 함수이다.*어디서찾는지.find("찾아야할 단어") 이렇게 사용한다. 간단히 말해서 어떤 단어가 처음으로 나타나는 index를 리턴하면 되는 문제이다. 내 처음 코드는 다음과 같았으나... find() 함수를 쓰면 우리가 원하는걸 (심지어 return -1까지도) 한 방에 얻을 수 있다는 걸 깨달았다.
기억해야하는 것: for 문으로 string을 돌면서 뒤부터 접근할 수 있는 인덱싱 방법이 있다! *for i in range()일 때, string[-1]이 맨 끝 문자니까 string[-1-i]로 그만큼 더 빼버리면 맨 뒤에서부터 하나씩 올라간다! (string도 list처럼 string[0] 이런식으로 인덱싱 한다) **string[-1-i] string[-1-i] string[-1-i] string[-1-i] string[-1-i] string[-1-i] string[-1-i] string[-1-i] string[-1-i]
2D Array를 traverse 하는데에 아주 좋은 테크닉이 있어 정리를 해보려고 한다. 코드트리에서 수강한 내용으로, 바로 dx dy 테크닉이다. 문제를 보면 2D Array를 시계방향으로 순환하며 돌아야하는 형태이다. 여기서 index의 시계방향 전환을 쉽게 해주는 dx dy 테크닉이란, 이렇게 좌표를 미리 세팅해주는 것을 뜻한다. 미리 dx와 dy 리스트를 만들어놓고 그 안에 방향값을 저장해놓으면, dx dy의 인덱스만 바꾸어도 x,y 좌표 방향을 한 번에 전환해줄 수 있다. 초기의 방향은 정하기 나름인데, 이 문제의 경우 일단 시작하면 동쪽으로 가기 때문에 동쪽을 0으로 놓고 초기 방향인 dir_num에 0을 할당해 주었다(dir_num = 0). 이때 중요한 것은 dx dy의 값은 리스트 m..
HashMap = Dictionary in python The point of this problem is to create a HashMap that stores the counts of the letters that appears in magazine, and subtract counts if the same letter is in ransomNote. The problem was setting the if conditions, 1. char must be in the counter (obiviously), otherwise we cannot make ransomNote with magazine2. Each letter should be used once in magazine, so the wo..
Linked List 자료구조를 다루는 문제이다. Pointer 2개를 사용하는 테크닉을 사용하여 중간의 node를 리턴하는 방식이다. slow pointer는 옆으로 한 칸만 가고, fast pointer는 딱 2배의 속도인 옆으로 두 칸을 간다. 만약 fast pointer가 linked list의 끝에 도달하거나 끝보다 더 뒤에 있는 식으로 도달한다면, slow pointer는 자동으로 중간에 위치할 것이다(속도가 딱 반이므로, fast가 끝에 도달하면 slow는 그 반절인 중간에 있을 것). Linked list이므로 일단 두 pointer를 head로 initialize해주고, 뒤의 node에 접근하고 싶은 경우 .next 를 써주면 된다. 뒤의 뒤 node에 접근하고 싶은 경우 .next.n..