본문 바로가기

분류 전체보기443

[백준 9461번] 파도반 수열 def solution(n): dp = [0]*101 dp[1], dp[2], dp[3], dp[4], dp[5] = 1, 1, 1, 2, 2 if n=6) = P(n-1) + P(n-5) 위와 같은 점화식이 도출되고 나서, DP 알고리즘 중에서도 Top-Down 방식을 사용하여 문제를 해결할 수 있었다 :) (재귀 함수를 이용한 탑-다운이 아니라, 반복문을 이용한 바텀-업 방식을 사용했다면 더 빠르게 풀이할 수 있었을 것이다.) 2023. 3. 2.
[JS Deep Dive] 40. Event 40.1) Event Driven Programming 브라우저는 처리해야 할 특정 사건이 발생하면 이를 감지하여 특정한 타입의 이벤트를 발생시킨다. ex) 클릭, 키보드 입력, 마우스 이동 등 만약에 애플리케이션이 특정 타입의 이벤트에 대해 반응하여 어떤 일을 하고 싶다면 해당하는 타입의 이벤트가 발생했을 때 호출될 함수를 브라우저에게 알려서 호출을 위임하는데, 이때 '이벤트가 발생했을 때 호출될 함수'를 이벤트 핸들러(Event Handler)라고 하고, 이벤트가 발생했을 때 브라우저에게 이벤트 핸들러의 호출을 위임하는 것을 이벤트 핸들러 등록이라고 한다. 즉, 함수를 언제 호출할지 알 수 없으므로 개발자가 명시적으로 함수를 호출하는 것이 아니라 브라우저에게 함수 호출을 위임하는 것이다. Window.. 2023. 3. 1.
[JS Deep Dive] 39. DOM 39.0) DOM(Document Object Model) 이란 ? DOM(Document Object Model): 브라우저의 HTML 문서 파싱의 결과물이자, HTML 문서의 ‘계층적 구조’와 ‘정보’를 표현하며 이를 제어할 수 있는 “DOM API”를 제공하는 Tree 자료구조. 39.1) 노드 39.1.1 HTML 요소와 노드 객체 HTML 요소는 HTML 문서를 구성하는 개별적인 요소를 의미한다. HTML 요소는 렌더링 엔진에 의해 파싱되어 DOM을 구성하는 요소 노드 객체로 변환된다. 이때 HTML 요소의 어트리뷰트는 어튜리뷰트 노드로, 텍스트 콘텐츠는 텍스트 노드로 변환된다. HTML 문서는 HTML 요소들의 집합으로 이루어지며, 이들은 중첩 관계를 가지고 이로 인해 부자 관계가 형성된다. .. 2023. 3. 1.
[JS Deep Dive] 38. 브라우저의 렌더링 과정 38.0) 서론 구글의 V8 자바스크립트 엔진으로 빌드된 JS 런타임 환경인 ‘Node.js’의 등장으로 자바스크립트는 웹 브라우저를 벗어나 서버 사이드 애플리케이션에서도 사용할 수 있는 범용 개발 언어가 되었다. 하지만 JS가 가장 많이 사용되는 분야는 웹 브라우저 환경에서 동작하는 웹 페이지/애플리케이션의 클라이언트 사이드이다. 자바스크립트는 브라우저에서 HTML, CSS와 함께 실행된다. 따라서 브라우저 환경을 고려할 때 더 효율적인 클라이언트 사이드 JS 프로그래밍이 가능하다. 이를 위해서 브라우저가 HTML, CSS, JS로 작성된 텍스트 문서를 어떻게 해석(Parsing)하여 브라우저에 렌더링하는지 살펴보자 ! 💡 파싱(Parsing) : 작성된 텍스트 문서를 읽어서 실행하기 위해 텍스트 문서.. 2023. 3. 1.
[백준 1904번] 01타일 이번 문제는 간단히 정리하자면 주어진 n의 자리수를 가지며 00과 1을 가지고 만들 수 있는 문자열의 개수를 구하는 문제이다. 처음에 이 문제를 보았을 때 왜 이게 DP 문제이고, 어떤 방식으로 문제를 풀어야 할지 감도 오지않았고, 결국 30분정도 고민하다가 풀이 접근 방법에 대해 이해하기 위하여 다른 분의 풀이를 참고하였다 😢 다른 분들의 풀이마저도 처음에 이해하기 어려웠기 때문에 직접 n=1(일의 자리수)부터 n=5(만의 자리수) 까지 종이에 적어보면서 이해해보기로 하였다. 다른 분들의 풀이를 참고하고 경우의 수를 직접 손으로 적어보니 이 문제가 왜 DP 문제인지 새삼 알 수 있었다. 1) 문제 접근법 n = 1 : 1 n = 2 : 00, 11 n = 3 : 100, 001, 111 n = 4 : .. 2023. 3. 1.
[백준 9184번] 신나는 함수 실행 import sys input = sys.stdin.readline def w(a,b,c): if a 20: return w(20,20,20) if dp[a][b][c]: return dp[a][b][c] if a < b and b < c: dp[a][b][c] = w(a,b,c-1) + w(a,b-1,c-1) - w(a,b-1,c) return dp[a][b][c] dp[a][b][c] = w(a-1,b,c) + w(a-1,b-1,c) + w(a-1,b,c-1) - w(a-1,b-1,c-1) return dp[a][b][c] dp = [[[0 for _ in range(21)] for _ in range(21)] for _ in range(21)] while True: a, b, c = map(int,.. 2023. 3. 1.