본문 바로가기

분류 전체보기32

반복과 재귀 : DFS 문제를 재귀로 구현하면 편리한 이유 For문과 재귀함수 for문과 재귀함수는 '반복'을 실행할 때 사용한다는 점에서 공통점을 가지고 있다. 처음 반복문을 배울 때 대부분 for문으로 배우기 때문에, 나중에 재귀함수에 익숙해지기란 쉽지 않다. 그럼에도 재귀를 알아야하는 이유는 '함수호출과 스택 메모리' 때문일 것이다. 재귀는 '스택 메모리'를 활용한다는 특징 때문에 깊이우선탐색(DFS)과 같은 특정 알고리즘 문제를 해결할 때 유용하게 쓰이는데, 그 이유에 대해서 알아보자. 고급 프로그래밍 언어에서 함수를 호출하게 되면, 운영체제는 스택 메모리라는 곳에 그 함수만 사용할 메모리 공간을 할당해준다. 그 함수 안에서 또 함수를 호출하면, 스택 메모리에 재귀적으로 호출된 함수들의 메모리 공간이 계속 쌓이게 된다. 즉, 가장 먼저 불린 함수는 자기 .. 2021. 5. 6.
Trade-off란? Trade-off란? Trade-off 관계는 컴퓨터 이론수업을 듣다보면 정말 많이 등장하는 개념이 아닌가 싶다. Trade-off 관계를 쉽게 설명하자면, 어떤 문제를 해결할 때 두 가지 방법이 존재할 때, 한 방법이 A측면에서 유리하고 B측면에서는 불리하면, 다른 방법은 B측면에서 유리하고 A측면에서 불리한 두 방법을 Trade-off 관계라고 말한다. 2021. 5. 6.
[C++ 알고리즘] 오일러 회로 / 오일러 경로 (Euler ciruit / Euler trail) 오일러 회로 문제 : 그래프의 모든 간선을 한 번씩만 지나면서, 모든 정점을 들린 뒤 시작점으로 돌아오는 문제. 다른 조건은 만족하되, 시작점으로 돌아오지 않아도 되는 문제는 오일러 경로 문제이다. 어떠한 양방향 그래프가 주어졌을 때, 오일러 회로 또는 경로가 존재할 수 있는지 판단할 수 있는 필요충분조건 두 가지가 존재한다. 양방향 그래프에서 오일러 회로 또는 경로가 존재하기 위한 필요충분조건 1. 모든 정점이 하나의 컴포넌트 안에 속해 있는가? 이를 확인하기 위해서 사용할 수 있는 방법 중 하나는, 한 정점에 대하여 dfs 또는 bfs를 사용해서 탐색을 한 번 마친 뒤, 방문하지 않은 정점이 존재할 경우 두 개 이상의 컴포넌트가 존재함을 알아낼 수 있다. int chk[N]; int adj[N][N].. 2021. 3. 1.
JLIS(합친 최대 증가 부분수열) 풀이, 오답노트 algospot.com/judge/problem/read/JLIS algospot.com :: JLIS 합친 LIS 문제 정보 문제 어떤 수열에서 0개 이상의 숫자를 지운 결과를 원 수열의 부분 수열이라고 부릅니다. 예를 들어 '4 7 6'은 '4 3 7 6 9'의 부분 수열입니다. 중복된 숫자가 없고 오름 차순으로 algospot.com 문제) 어떤 수열에서 0개 이상의 숫자를 지운 결과를 원 수열의 부분 수열이라고 부릅니다. 예를 들어 '4 7 6'은 '4 3 7 6 9'의 부분 수열입니다. 중복된 숫자가 없고 오름 차순으로 정렬되어 있는 부분 수열들을 가리켜 증가 부분 수열이라고 부르지요. 예를 들어 '3 6 9'는 앞의 수열의 증가 부분 수열입니다. 두 개의 정수 수열 A 와 B 에서 각각 증가 .. 2021. 1. 16.
[독서] 클루지 - 생각의 역사를 뒤집는 기막힌 발견 우리는 우리 스스로 완벽하지 않음을 인식하고 인정해야 할까? 인정을 통해 얻는 것은 무엇인가? 그에 대한 답을 책을 통해 찾아볼 수 있다. - 핵심 내용 클루지란 어떤 문제에 대한 서툴거나 세련되지 않은 해결책을 뜻한다. 클루지는 상황에 맞게 급하게 만들어져 아주 효과적인 해결책이 될 수도 있고, 그렇지 않을 수도 있다. 저자 개리 마커스는 인간의 마음이 클루지라고 주장한다. 우리의 뇌는 오래 전 생존을 위해 오랜시간동안 탄탄하고 정교하게 만들어진 선조체계(반응체계) 위에 짧은 시간 동안 빠르게 이뤄진 문명의 발전 속도에 맞추지 못하고 급하게 만들어진 숙고체계가 클루지의 형태로 형성되었다. 상대적으로 먼저, 긴 시간동안 진화한 선조체계는 긴급하거나 순간적인 선택에서 항상 주도권을 잡는다. 그래서 우리는 .. 2020. 6. 17.
[간단한 웹] 라이브러리 없이 TODOlist 만들기 웹계의 Hello World! 라고 불리는 To Do List를 만들어보았다. 사용한 언어는 HTML, CSS, Javascript 1. HTML My To Do List - 태그로 먼저 제목이 될 부분 (정적인 부분)과 리스트를 포함할 부분(동적인 부분)을 CSS로 처리하기 쉽도록 나눴다. - 제목이 될 부분에는 제목과 텍스트박스, submit 버튼을 넣어주고 'title'이라는 classname을 정했다. 텍스트박스의 경우 placeholder를 써야 텍스트박스에 힌트처럼 흐릿한 글씨, 클릭하면 없어지는 글씨를 넣을 수 있다고 한다. - 리스트가 될 부분은 body라는 classname을 정하고 태그를 넣어 'list'라는 idname을 넣었다. 2. Javascript submitClicked = .. 2020. 6. 10.