알고리즘 공부는 어디에서 시작해서 어디까지 해야 할까요? 이 알고리즘 공부라는 것의 범위를 세상의 모든 알고리즘으로 정의해 버린다면, 사람들이 저마다 부르는 알고리즘이라고 불리는 공부의 내용도 모두 동일한 범위로 규정되겠지만, 인생에서 시간은 한정되어 있기 때문에, 공부에도 선택과 집중이 필요합니다. 그래서 알고리즘 공부를 시작하기에 앞서, 내가 알고리즘을 공부하려고 하는 목적을 잘 파악하고 이에 맞게 효율적으로 공부해야 한다. 학교에서 배우는 알고리즘 -> 자료구조와 알고리즘의 원리 이해 업무에 사용하기 위한 알고리즘 -> 자료구조/알고리즘 이해 및 각 언어의 알고리즘 라이브러리 특징의 이해 인터뷰를 위한 알고리즘 -> 알고리즘의 응용 및 응용한 애플리케이션 로직 구현 대회를 위한 알고리즘 -> 알고리..
코딜리티를 처음 알게된건 2019년 2월 모회사의 온라인 과제 인터뷰를 진행하면서 였습니다. 그 회사가 채택한 코딩 온라인 과제 플랫폼이 코딜리티 였고, 코딜리티에 나오는 문제(데모 테스트)들을 모두 풀어보았습니다. 코딜리티 후기 코딜리티는 제가 그동안 풀었던 다른 알고리즘 사이트나 코딩인터뷰 사이트와 많이 다르다는 느낌을 받았습니다. 제가 생각하는 코딜리티의 특징은 프로그래밍의 기본에 충실하다는 것이고, 사실은 논리적사고 수준은 크게 염두해두지 않는것 같다는 생각이 들었습니다. 오히려 조금 더 실무적인 느낌이라는 생각이 들 정도였습니다. 특히 코딜리티의 프로그래밍 테스트에는 '꼼꼼함'이 필요하다는 생각이 들었습니다. 주어지지 않은 엣지케이스 까지 포함하여 테스트케이스를 100% 통과해야합니다. 코딜리티..
리트코드에서 공통조상찾기 문제를 풀어봅시다. leetcode.com/problemset/all/?search=lca 235. Lowest Common Ancestor of a Binary Search Tree leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/ 진정한 LCA 문제라기 보다는, BST의 특성을 이용해 값을 기준으로 부모노드의 위치를 찾아가는 문제. class Solution: def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode': parent_val = root.val p_val = p.val q_val =..
컴퓨터 공학에서, 최장 증가 부분 수열(Longest Increasing Subsequence) 문제는, 주어진 수열에서 오름차순으로 정렬된 가장 긴 부분수열을 찾는 문제이다. 여기서의 부분 수열은 연속적이거나 유일할 필요는 없다. 최장 증가 부분 수열은 알고리즘을 포함한 수학, 랜덤 행렬 이론, 표현론, 그리고 물리학과 관련된 다양한 분야에서 연구되었다.[1] 최장 증가 부분 수열 문제는, 입력 수열의 길이가 n일 때 O(nlogn)의 시간에 풀이가 가능하다.[2] 출처: 위키피디아 4.1. 정렬 문제[편집] 사람들이 각각 번호를 가지고 있고 그 번호 순서에 맞춰서 일렬로 정렬하려고 한다. 이때 움직인 사람들의 총 수를 최소로 하고 싶다면 어떻게 해야 하는가? (단, 초기에 사람들은 무작위로 일렬로 섞..
Island Count Given a 2D array binaryMatrix of 0s and 1s, implement a function getNumberOfIslands that returns the number of islands of 1s in binaryMatrix. An island is defined as a group of adjacent values that are all 1s. A cell in binaryMatrix is considered adjacent to another cell if they are next to each either on the same row or column. Note that two values of 1 are not part of the same isl..
BST Successor Search In a Binary Search Tree (BST), an Inorder Successor of a node is defined as the node with the smallest key greater than the key of the input node (see examples below). Given a node inputNode in a BST, you’re asked to write a function findInOrderSuccessor that returns the Inorder Successor of inputNode. If inputNode has no Inorder Successor, return null. Explain your solution..
Find The Duplicates Given two sorted arrays arr1 and arr2 of passport numbers, implement a function findDuplicates that returns an array of all passport numbers that are both in arr1 and arr2. Note that the output array should be sorted in an ascending order. Let N and M be the lengths of arr1 and arr2, respectively. Solve for two cases and analyze the time & space complexities of your solutions..
BST Successor Search In a Binary Search Tree (BST), an Inorder Successor of a node is defined as the node with the smallest key greater than the key of the input node (see examples below). Given a node inputNode in a BST, you’re asked to write a function findInOrderSuccessor that returns the Inorder Successor of inputNode. If inputNode has no Inorder Successor, return null. Explain your solution..
Decrypt Message An infamous gang of cyber criminals named “The Gray Cyber Mob”, which is behind many hacking attacks and drug trafficking, has recently become a target for the FBI. After intercepting some of their messages, which looked like complete nonsense, the agency learned that they indeed encrypt their messages, and studied their method of encryption. Their messages consist of lowercase l..
Deletion Distance The deletion distance of two strings is the minimum number of characters you need to delete in the two strings in order to get the same string. For instance, the deletion distance between "heat" and "hit" is 3: By deleting 'e' and 'a' in "heat", and 'i' in "hit", we get the string "ht" in both cases. We cannot get the same string from both strings by deleting 2 letters or fewer..
이전 12월 9일 995 995 Minimum Number of K Consecutive Bit Flips Greedy Sliding Window 49.20% Hard 1231 1231 Divide Chocolate Binary Search Greedy 53.20% Hard 1296 1296 Divide Array in Sets of K Consecutive Numbers Array Greedy 55.10% Medium 767 767 Reorganize String String Heap Greedy Sort 49.70% Medium 659 659 Split Array into Consecutive Subsequences Heap Greedy 44.10% Medium 406 406 Queue Reconst..
이전 12월 9일 1368 1368 Minimum Cost to Make at Least One Valid Path in a Grid Breadth-first Search 55.90% Hard 1293 1293 Shortest Path in a Grid with Obstacles Elimination Breadth-first Search 42.60% Hard 1345 1345 Jump Game IV Breadth-first Search 40.30% Hard 752 752 Open the Lock Breadth-first Search 52.40% Medium 317 317 Shortest Distance from All Buildings Breadth-first Search 42.30% Hard 127 1..
https://www.youtube.com/watch?v=oBt53YbR9Kk www.educative.io/courses/grokking-dynamic-programming-patterns-for-coding-interviews Grokking Dynamic Programming Patterns for Coding Interviews - Learn Interactively The fact is, Dynamic Programming (DP) problems can be some of the most intimidating on a coding interview. Even when it's actually clear if a problem can be solved using DP (which it rare..
SqlSum Elementry SELECT sum(v) FROM elements; StrSymmetryPoint Painless Find a symmetry point of a string, if any. class Solution { public int solution(String S) { int sLen = S.length(); if ((sLen & 1) == 0) { return -1; } final int result = sLen / 2; for (int i = result, j = result; j >= 0; i++, j--) { if (S.charAt(i) != S.charAt(j)) { return -1; } } return result; } } TreeHeight Painless class..
[Leetcode] 419. Battleships in a Board leetcode.com/problems/battleships-in-a-board/ Battleships in a Board - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 요렇게 생각할 수 있겠으나 class Solution { public int countBattleships(char[][] board) { int res = 0, m = board.length, n = board[0].le..
MinAbsSum Ambitious Given array of integers, find the lowest absolute sum of elements. app.codility.com/programmers/lessons/17-dynamic_programming/min_abs_sum/ MinAbsSum coding task - Learn to Code - Codility Given array of integers, find the lowest absolute sum of elements. app.codility.com N 개의 정수로 구성된 배열 A와 {-1, 1} 집합에서 N 개의 정수로 구성된 시퀀스 S에 대해 다음과 같이 val (A, S)를 정의합니다. val (A, S) = | sum {A [i..
[100%] FrogRiverOne Find the earliest time when a frog can jump to the other side of a river. Respectable [100%] MaxCounters Calculate the values of counters after applying all alternating operations: increase counter by 1; set value of all counters to current maximum. Respectable [100%] MissingInteger Find the smallest positive integer that does not occur in a given sequence. Painless // you ca..
한번에 다운받을 수 있다. (2020년 11월 30일 버전) 출처: app.codility.com/programmers/lessons/1-iterations/ 1. Iterations lesson - Learn to Code - Codility Find longest sequence of zeros in binary representation of an integer. app.codility.com
지인 추천 받은건데 분량이 많고 해서 고민중... 실제 과제는 빡세다고 함 영어공부 측면에서 렉처만 쉐도잉 해보는것도 괜찮은거 같다. 실제 비디오는 한주당 두세시간 분량인것 같다. www.coursera.org/learn/algorithms-part1/home/welcome Coursera | Online Courses & Credentials From Top Educators. Join for Free | Coursera Learn online and earn valuable credentials from top universities like Yale, Michigan, Stanford, and leading companies like Google and IBM. Join Coursera for fr..
무언가를 잘하는 방법은 그게 자다가 툭 쳤을때도 자동으로 나올때까지 하는것이다.. 내생각.. 어제 MBA를 하고 있는 친구를 만났다. 인문대를 나온 그 친구 왈, 데이터 분석 수업을 들었는데 R이고 뭐고 하나도 모르겠다고, 얼마나 공부하면 잘하게 되냐고.. 무슨 강의를 들으면 되고 시간이 얼마나 걸리냐고.. 내가 대답해주었다. 프로그래밍 배우는 개발자들도 다 같은 고민과 좌절을 겪는다고. 수업한번 듣고 따라치고 그리고 끝나는 사람들은 절대로 개발을 배울수가 없다고.. 강의를 한번 들으면서 똑같이 해보고, 그리고 다음에 또 한번 따라해보고,, 그리고 또 해보고 이정도는 해야된다고. 강의만 한번 듣고 프로그래밍을 직접안해보는것은 자전거 타는 방법만 배우고 직접 자전거를 안타면서, 다음에 자전거를 능숙하게 타..
leetcode.com/problems/jewels-and-stones/ Jewels and Stones - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 이 문제의 출제의도는 브루트포스(순회)와 해쉬를 썼을때 time complexity와 space complexity의 차이점을 알수있는지 알아보려고 내는것 같다. 우리 시스템에서 스페이스가 중요한지 타임이 중요한지 먼저 물어보고 진행하면 좋을것 같다. class Solution { public int numJ..
폰스크린과 온사이트가 섞여있어서 좀 그렇긴 하지만 ㅠㅠ 일단 EASY 65문제 출발~! 1 771 Jewels and Stones Hash Table 86.70% Easy 2 1021 Remove Outermost Parentheses Stack 78.50% Easy 3 346 Moving Average from Data Stream DesignQueue 72.30% Easy 4 359 Logger Rate Limiter Hash TableDesign 71.40% Easy 5 1237 Find Positive Integer Solution for a Given Equation MathBinary Search 69.60% Easy 6 1441 Build an Array With Stack Operation..
내가 정말 좋아하는 책. 여러번 읽어도 너무 재밌는 책이다. book.algospot.com/ 알고리즘 문제 해결 전략 프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략, 구종만 지음, 인사이트, ISBN 978-89-6626-054-6 새 소식 책 소개 은 새로운 알고리즘 책입니다. 종이에 적힌 의사코드 book.algospot.com 알고리즘 문제 해결 전략 세트 국내도서 저자 : 구종만 출판 : 인사이트 2012.11.23 상세보기 ==== 1권 ==== 지은이의 글 1부 문제 해결 시작하기 __개관 1장 문제 해결과 프로그래밍 대회 __1.1 도입 __1.2 프로그래밍 대회 __1.3 이 책을 읽는 방법 __1.4 국내에서 참가할 수 있는 프로그래밍 대회들 __1.5 대회 준비를 위한 조언 __..
인터뷰를 위한 알고리즘 공부, 아래와 같이 잠깐 글을 썼었다. 이 모든게 귀찮은 사람들을 위한 꿀팁. 2020/09/25 - [알고리즘] - 인터뷰(면접)을 위한 알고리즘 공부 인터뷰(면접)을 위한 알고리즘 공부 인터뷰를 위한 알고리즘 공부는 책 딱 한권만 있으면 완성된다. 게리 라크만 맥도웰이라는 사람이 쓴 크래킹 더 코딩 인터뷰 라는 책인데, 진짜 소프트웨어 엔지니어 인터뷰의 모든것이 포함되� inner-game.tistory.com 리트코드를 가입하는 것이다. 하지만 조금 더 구체적으로 알려줌. 2020/08/19 - [분류 전체보기] - [개발자 해외취업] 리트코드 프리미엄 왜 해야 하는가? [개발자 해외취업] 리트코드 프리미엄 왜 해야 하는가? 한국에서는 백준사이트나 알고스팟 등을 주로 하지만,..
인터뷰를 위한 알고리즘 공부는 책 딱 한권만 있으면 완성된다. 게리 라크만 맥도웰이라는 사람이 쓴 크래킹 더 코딩 인터뷰 라는 책인데, 진짜 소프트웨어 엔지니어 인터뷰의 모든것이 포함되어 있다. 무려 한국어로 된 번역서적도 있다. 정보는 포스트 맨 아래에 첨부하였다. 코딩 인터뷰 완전 분석 국내도서 저자 : 게일 라크만 맥도웰(Gayle Laakmann McDowell) / 이창현역 출판 : 인사이트 2017.08.14 상세보기
첫번째 원칙, 알고리즘을 아주 소중하게 여긴다. 이 말이 무슨말이냐면, 알고리즘 책이나 영상을 하나 정해놓고 자기만의 노트를 만들면서 공부를 해나가는데, 이걸 아주 소중히 다뤄야해요. 초등학교 때, 병아리 처음 샀을때처럼 계속 잘 있는지 계속 들여다 봐야한다. 그게 첫번째 걸음이다.. 내가 처음 봤던 책은 이 책인데, 대학교 1학년인가 2학년때 배웠던 걸로 기억한다. 책에서 가장 마음에 들었던 것은, 이 책에서 제공하는 CD에 알고리즘 애니메이션이 들어있었다는 점이다. 그래서 하노이의 탑 같은 문제들을 애니메이션을 여러번 돌려보면서 그 원리를 쉽게 파악할 수 있었다. 그리고 링크드리스트 의 삽입 삭제 같은것들도 모두 이렇게 코드와 상관없이 일단 애니메이션 만 봐도 이해를 할 수 있고, 이해를 해야한다. ..
알고리즘 공부는 이 세상의 공부중에 진짜 쉬운편에 속하는 공부라고 생각한다. 알고리즘의 원리를 이해하고 그걸 코드로 쓸수 있으면 끝. '알고리즘'이라고 인간이 부를수 있는것들은 어차피 인간이 이해할수 있는 수준이어야만 알고리즘이라고 정의할 수 있고 '코드'로 쓰는 과정에서도 어차피 제약사항이 있기때문에 제약사항들을 추가하고 나면 풀어내는건 어렵지 않다. 알고리즘 스터디를 할때, 문제 다 풀어오라고 하는데, 문제도 안풀고 그냥 와서는 바로 이해하려고 하는 사람들이 있다. 그런사람들이 태어날때부터 천재였다면 내가 할말이 없지만.. 그렇게 될수는 없다고 생각한다... 그렇기 때문에 알고리즘 문제가 논리적으로 어떻게 풀어질지를 이해하고, 자신이 사용하는 언어로 풀어낸다는 것은 당연히 예습, 즉, 준비가 필요한 ..