본문 바로가기

분류 전체보기

(84)
백준 3015 오아시스 재결합 https://www.acmicpc.net/problem/3015 3015번: 오아시스 재결합 첫째 줄에 줄에서 기다리고 있는 사람의 수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에는 각 사람의 키가 나노미터 단위로 주어진다. 모든 사람의 키는 231 나노미터 보다 작다. 사람 www.acmicpc.net 결론부터 먼저 말하면 이 문제는 스택 활용이 필요하다. 어차피 검색을 했다면, 풀이가 필요했을 테니 스포일러가 아니리라 생각한다. 스택 활용 문제는 항상 쉽지 않다. 하지만 시간 복잡도를 O(N)으로 낮춰주는 대단히 강력한 방법이다. O(N^2)이 보통 최악이라면, 그것을 O(NlogN)으로만 낮추어도 효율이 좋은 건데 O(N)은 사실상 최선의 방법이다. 적어도 모든 데이터..
자바스크립트의 비동기 처리 (배열에서의 비동기 처리) - 2 앞선 포스팅에서 비동기 처리의 기본적인 부분을 살펴보았다. 이번에는 그것보다는 까다로운 케이스, 배열에서의 비동기처리를 알아보겠다. 쿼리의 결과로 리스트를 받으면 그것에 대한 추가 가공을 해야 하는 경우가 생기는데 그때 다시 필연적으로 배열에서의 비동기 처리가 필요하다. 이번에도 예제를 통해 작동 방식을 알아보자 b = [1, 3, 4] const f = async arr => { return arr.map(e => e + 3) } console.log(f(b)) 일단 위와 같이, 간단하게 1차원 배열 b부터 시작하자. f라는 함수에 배열을 넣으면 각 원소에 3을 더해서 리턴해준다. 근데 콘솔에 찍히는 건 프로미스가 붙어있다. 이제 이건 예상할 수 있어야 한다. async함수이기에 리턴에는 프로미스가 붙..
자바스크립트의 비동기 처리 (async - await , promise , then ) - 1 비동기 관련한 글을 쓰겠다고 생각한지 정말 오래되었는데 이제야 쓰게 되었다. 부지런히 글을 쓰겠다고 계속 다짐하지만 실천이 참 힘들다.. 비동기 주제를 한 번에 다 정리할 순 없으니 계속 조금씩 추가 및 수정하도록 하겠다. 개발을 하다보면 데이터베이스를 다루게 되는데, 그때 필연적으로 비동기 처리와 만나게 된다. 이전 Node.js - MySQL 글에서 말했듯이, 보통 커넥션 풀 (pool)에서 커넥션을 가져와 처리 후에 반납하는 형태가 된다. 이 과정이 비동기이므로 callback(콜백)함수, async-await, promise, then 등을 활용하여야 한다. 그리고 동시에 let a=3, console.log('abc')이러한 명령들은 '동기 처리'라는 걸 알 수 있다. 일단 promise는 약속..
LeetCode 532 K-diff Pairs in an Array https://leetcode.com/problems/k-diff-pairs-in-an-array/ K-diff Pairs in an Array - 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 일단은 정렬, 이분탐색을 활용하는 문제이다. 여기에 조금 더 생각을 붙여야 한다. unique한 페어를 리턴해야하기 때문이다. 이분탐색을 하고자 한다면, 이분탐색을 행하는 배열 등이 정렬되어 있어야 한다. 그래서 이분탐색과 정렬은 붙어다닐 수 밖에 없다. 두 수의 차가 ..
백준 4256 트리 https://www.acmicpc.net/problem/4256 4256번: 트리 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 노드의 개수 n이 주어진다. (1 ≤ n ≤ 1,000) BT의 모든 노드에는 1부터 n까지 서로 다른 번호가 매겨져 있다. 다음 www.acmicpc.net 글을 2~3일에 하나씩 올리고 싶은데, 그것도 보통 힘든게 아닌 것 같다. 사실 다른 내용도 많이 담아야 하는데, 그동안 미뤄둔 백준 문제가 너무나 많기에 계속 이렇게 조금씩 올리고 있다. 트리를 다루면 전위 순회, 중위 순회, 후위 순회에 대한 것을 금방 맞닥뜨리게 된다. 너무나도 전형적인 문제이기 때문이다. 이 문제가 바로 그것이다. 재귀함수에 대한 이해를 하기도 좋고, 트리구조에 ..
코드와 선형 구조에 대한 생각 코드를 보면 줄바꿈과 인덴트가 있다. 줄바꿈은 무엇일까? 명령과 명령 간의 분리를 뜻하기도 하고, 줄 번호에 따라서 실행 순서를 뜻하기도 한다. (비동기 처리는 일단은 논외로 한다.) 아마도 마지막에 line break가 있는지를 보고 줄바꿈을 파악할 것이다. 하지만 이렇게만 쓴다면 '갈래' 또는 '영역'을 표현할 수 없다. 순차적으로 실행되는 명령 리스트만 적을 수 있을 것이다. 왼쪽의 그림을 보자. 저런 식으로 조건에 따른 갈래가 생긴다면 코드상에서 v>1? v=5 v=0 이런식으로 쓸 수 없다. 이제 이를 표현하기 위해 뭔가 새로운 표현법이 필요해진 것이다. 하지만 코드를 쓰는 공간에서는 그림을 그리는 것이 아니고 텍스트기에 뭔가 아이디어가 필요하다. 그것을 해결해주는 것이 바로 인덴트인 것이다. ..
LeetCode 756 Pyramid Transition Matrix - with Trie (트라이) https://leetcode.com/problems/pyramid-transition-matrix/ Pyramid Transition Matrix - 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 필자는 재귀 안에 또 다른 재귀가 돌아가야하는 구조로 생각하였다. 근데 그렇게 하여도 시간초과가 나서 트라이 구조까지 끼얹었다. 가장 바닥에 있는 문자열(문제에서는 bottom으로 표현)이 주어졌을 때, 일단 다음 bottom을 만들어야 한다. 필자는 풀이에서 bot..
LeetCode 1367 Linked List in Binary Tree https://leetcode.com/problems/linked-list-in-binary-tree/ Linked List in Binary Tree - 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 문제에서 이진트리에서 사용될 노드와 링크드리스트의 각 노드 구현 방식이 주어진다. 이제 문제해결을 위해 각 케이스들에 대해 생각해 봐야한다. 그리고 필연적으로 재귀함수를 사용하게 될테니, 기저조건(종료조건, 탈출조건)에 대해 먼저 생각해 본다. 문제의 Constr..