본문 바로가기

프로그래머

[Python] Leet Code 15. 3Sum 본 내용은 를 참고했습니다. 투 포인터 활용 class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: output = [] nums = sorted(nums) for i in range(len(nums)-2): if (i > 0) and nums[i] == nums[i-1]: continue left, right = i+1, len(nums)-1 while left 0: right -= 1 else: output.append([nums[left], nums[right], nums[i]]).. 더보기
[개체지향 프로그래밍] 개체 모델링 | 클래스 다이어그램 | 유연성 | OOP 개체 모델링 클래스 다이어그램의 범위 클래스가 가지고 있는 상태 상수는 클래스 다이어그램에 포함 x 클래스에 실행할 수 있는 동작의 목록(실제 구현은 보여주지 않음) 클래스 간의 관계 유연성의 두 얼굴 수십년동안 실전에 OOP를 사용하고 업계까 깨달은 것 안 유연한 클래스를 만드는 경우가 더 빈번하며 그래도 상관 없음 절대 반지는 없음 어느 정도의 유연성이 필요한지는 각 프로젝트마다 다름 OOP 공부 가이드라인 프로그래머의 기본자세를 확실히 잡을 것 읽기 명확한 코드 만들기 실수를 저지르기 어려운 코드 만들기 문제를 해결하는 코드 만들기 문제가 생기면 디버깅 하기 필요에 따라 점점 유연성을 키우는 법을 배워 나가기 더보기
[Python] Leet Code 1. Two Sum 본 내용은 를 참고했습니다. 풀이 1. 브루트 포스(가장 느림) class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for i in range(len(nums)-1): for j in range(i+1, len(nums)): if nums[i] + nums[j] == target: return [i, j] 풀이 2. in을 이용한 탐색 class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for i, a in enumerate(nums): b = target - a if b in nums[i+1:]: return[nums.index(a).. 더보기
[Python] Leet Code 5. Longest Palindromic Substring 본 내용은 를 참고했습니다. class Solution: def longestPalindrome(self, s: str) -> str: if len(s) = 0 and right < len(s) and s[left] == s[right]: left -= 1 right += 1 return s[left+1:right] result = '' for i in range(len(s)-1): result = max(result, expandStr(i,i+1), expandStr(i,i+2), key=len) return result 이 문제에서 알아야할 포인트 if len.. 더보기
[Python] Leet Code 49 : Group Anagrams 본 내용은 를 참고했습니다. class Solution: def groupAnagrams(self, strs: List[str]) -> List[List[str]]: anagram = collections.defaultdict(list) for word in strs: anagram[''.join(sorted(word))].append(word) return anagram.values() 이 문제에서 배워야할 포인트 for word in strs: anagram[''.join(sorted(word))].append(word) 정렬하여 딕셔너리에 추가 key: sorted(word), value: word 만약 존재하지 않는 키를 삽입하려 할 경우 KeyError가 발생하므로 defaultdict()로 구.. 더보기
[Python] Leet Code 819 : Most Common Word 본 내용은 를 참고했습니다. class Solution: def mostCommonWord(self, paragraph: str, banned: List[str]) -> str: words = [word for word in re.sub(r'[^\w]', ' ', paragraph) .lower().split() if word not in banned] counts = collections.Counter(words) return counts.most_common(1)[0][0] 이 문제에서 배워야할 포인트 words = [word for word in re.sub(r'[^\w]', ' ', paragraph) .lower().split() if word not in banned] 정규표현식 입력 값에는 .. 더보기
[개체지향 프로그래밍] 접근 제어자 | getter/setter | 캡슐화 | 추상화 개체는 자신의 상태를 스스로 책임져야 함! 즉, 개체 외부에서 개체의 상태에 직접 접근하는 것을 막아야 함 개체의 상태를 변경하는 주체는 개체 자신인 게 이상적 접근 제어자(access modifiedr)를 통해 이런 일을 할 수 있음 접근 제어자 어떤 외부자들이 개체 속에 접근할 수 있는지 정의 public: 누구나 접근 가능 protected: 자식들만 접근 가능 생략할 경우: 같은 패키지에 속한 클래스들만 접근 가능 default 혹은 package 접근 제어자라고 부름 private: 외부 접근 금지 접근 제어자: private 외부자들은 접근할 수 없음 클래스 내부에서만 접근 가능함 클래스의 경우 내포(nested) 클래스에 한 해 붙일 수 있음 private 멤버 변수 public class .. 더보기
[개체지향 프로그래밍] 개체 생성 | 가비지 콜렉터(garbage collector) | 생성자(constructor) 개체 생성 시 멤버 데이터의 초기화 C human_t* adam = (human_t*)malloc(sizeof(human_t)); // adam->name: 쓰레기 값 // adam->age: 쓰레기 값 // adam->sec: 쓰레기 값 printf("%d\n", adam->age); C 구조체의 변수는 선언 시 초기화가 안됨 메모리에 남아있던 쓰레기 값이 그대로 유지됨 Java Human adam = new Human(); // adam.name: null // adam.age: 0 // adam.sex: null System.out.printf("%d", adam.age); Java는 0에 준하는 값으로 초기화해 줌 int는 0 float은 0.0 참조형은 null로 public class Huma.. 더보기
[개체지향 프로그래밍] 클래스(class) | 접근 제어자(public, private) | 인스턴스(instance) 간단한 클래스 코드 클래스 선언 예 public class HUman{ public String name; public int age; public Sex esx; public void walk() { this.age += 1; } public void eat() { this.age -= 1; } public void speak() { System.out.printIn("hello friend"); } } 접근 제어자 public 멤버 변수 public ; 멤버 함수 public () {...} 멤버 변수와 멤버 함수 선언 시 앞에 붙는 접근 제어자 외부에서 클래스 내부에 담긴 상태/동작에 접근하는 것을 허용 여기서 외부는 다른 패키지를 의미 몇 가지 용어 정리 상태를 칭하는 용어 멤버 변수(member.. 더보기
[Python] Leet Code 937 : Reorder Log Files 풀이 및 분석 본 내용은 를 참고했습니다. Leet Code 937 : Reorder Log Files def reorderLogFiles(self, logs: List[str]) -> List[str]: letters, digits = [], [] for log in logs: if log.split()[1].isdigit(): digits.append(log) else: letters.append(log) letters.sort(key=lambda x: (x.split()[1:], x.split()[0])) return letters + digits 포인트 로그의 두번째 원소를 기준으로 .isdigit()을 사용하여 두 개의 리스트로 분류(letters, digits) lambda를 이용한 sort 문자가 동일한 .. 더보기