본문 바로가기

전체 글

(86)
[Medium] 5. Longest Palindromic Substring (구글 코딩 테스트 기출 문제) #문제 설명 Leetcode 5번 문제는 주어진 문자열에서 가장 긴 palindrome을 찾는 문제이다. 여기서 Palindrome이란 거꾸로 읽어도 똑바로 읽어도 같은 문자열이다 (예: 기러기 토마토 스위스 인도인 별똥별 우영우, 'Kayak', 'deed', 'rotator', 'noon', 'racecar 등등) #풀이 class Solution { public String longestPalindrome(String s) { if (s == null || s.length() < 1) return ""; int start = 0, end = 0; for (int i = 0; i < s.length(); i++) { int len1 = expandAroundCenter(s, i, i); int len..
[Lecture 2] Unix File Descriptors and Pipes #Unix File Descriptors Unix file descritors, 유닉스 파일 디스크립터는 운영 체계에서 파일을 사용할 때 각 파일에 대한 정보를 유지하는 기억 장치의 한 영역, 또는 그 정보이다. 파일 디스크립터는 사용자 프로세스가 바이트 시퀀스인 파일을 참조할 수 있도록 하는 핸들(handle)이다. 유닉스는 디스크, 터미널, 네트워크 소켓, IPC 채널(파이프 등)과 같은 다양한 커널 추상화를 추상 I/O 장치 파일로 표현한다. 기본 개체의 종류에 관계없이 동일한 API 제공 read(2), write(2), close(2), lseek(2), dup2() 등등 검색 가능한 경우 읽기/쓰기 위치를 유지할 수 있음 참고: 모든 종류의 파일 디스크립터에서 모든 작업이 작동하는 것은 아니다..
[Medium] 238. Product of Array Except Self (애플 코딩 테스트 문제) Leetcode 238번 문제는 정수로 채워진 array가 주어지고, 원래의 index에있는 값을 제외한 모든 index의 값을 곱한 값이 들어있는 array를 return하는 문제이다. class Solution { public int[] productExceptSelf(int[] nums) { int product = 1; for(int i = 0; i < nums.length;i++){ product *= nums[i]; } int[] arr = new int[nums.length]; for(int i = 0; i < nums.length;i++){ if(nums[i] == 0){ arr[i] = product; } else{ arr[i] = product / nums[i]; } } return a..
[Medium] 39. Combination Sum #Backtracking 풀이 class Solution{ public List combinationSum(int[] nums, int target) { List list = new ArrayList(); backtrack(list, new ArrayList(), nums, target, 0); return list; } private void backtrack(List list, List tempList, int [] nums, int remain, int start){ if(remain < 0) return; else if(remain == 0) list.add(new ArrayList(tempList)); else{ for(int i = start; i < nums.length; i++){ temp..
[Easy] 104. Maximum Depth of Binary Tree Leetcode 104번 문제는 주어진 binary tree의 최대 깊이 (Maximum depth)를 구하는 문제이다. #풀이 class Solution { public int maxDepth(TreeNode root) { if(root == null){ return 0; } int left = 1 + maxDepth(root.left); int right = 1 + maxDepth(root.right); return Math.max(left, right); } } 이 문제는 recursion를 통해 쉽게 풀수 있다. 왼쪽 tree의 깊이를 구하고 오른쪽 트리의 깊이와 비교해 더 큰 값을 return하는 식으로 풀수 있다. 위의 코드를 간략하면 아래처럼 된다. class Solution { public..
[Lecture 1-3] Processes Part III #Process Management OS 는 process들을 관리 하기 위해 API (system calls)들을 제공한다. 프로세스를 관리 하기위해선 여러가지의 단계가 필요하다. Process Creation: 프로세스를 생성하는 단계이다, 보통 프로세스의 새로운 환경을 생성하는 것을 포함한다. Process Termination: 이단계는 일반적인 프로세스 종료와 비정상적 프로세스종료를 포함한다. 일반적이 프로세스 종료 (Normal termination) 은 main() 함수에서 return된 exit() 함수같은 것이고, 비정상적 종료 (Abnormal termination) 은 보통 예상치못한 crash나 외부 개입에 의해 프로세스가 "kill" 된상태이다 Process interaction:..
[Medium] 53. Maximum Subarray Leetcode 53번 문제는 주어진 array에서 주어진 값을 더했을때 가장 합이 큰 subarray를 찾는 문제이다. #Brute Force 풀이 class Solution { public int maxSubArray(int[] nums) { int max = nums[0]; for(int i=0; i
[Mini-Lecture] Character Sets and Unicode #Character Sets Character Set, 문자 집합이란, 컴퓨터에서 정보의 표현 수단으로 사용되는 글자들의 집합을 뜻한다. 문자 집합을 더 자세하게 알기 위해선 bytes가 무엇인지 알아야 한다. Byte는 디지털 정보 즉 데이터 처리의 기본 단위이다. 바이트는 1-bit가 8개, 즉 8비트이고, 옥텟으로 불리기도 한다. 바이트는 8비트 이기 때문에 2^8승 즉 256개의 값을 나타낼 수 있다. 이진법 에서는 0-255, 16진법 에서는 0x00 에서 0xff까지 나타낼수 있다. 문자랑 인간의 언어를 적는 데 사용하는 추상적이고 시각적인 기호 체계이다. 아래 예시를 한번 보자. 우리는 아무런 문자나 숫자 없이도 아래 그림들을 연결 지을수 있다 (사과, 나무, 해바라기, 프리첼, 비치볼, 집..