전체 글 164

[프론트엔드] CDN 개념과 특징

CDN(Content Delivery Network)전 세계에 분산되어 있는 서버들을 통해 사용자에게 웹 컨텐츠를 빠르고 효율적으로 제공하는 기술이다.웹사이트의 이미지, CSS, JavaScript 파일, 동영상 등 정적 컨텐츠를 사용자와 물리적으로 가까운 서버에서 전달하는 방식이다. 작동방식1. 자주 요청되는 컨텐츠를 전 세계 여러 지역에 위치한 엣지 서버(Edge Server)에 캐싱한다.2. 사용자가 웹사이트에 요청을 보낼 때, DNS를 통해 가장 가까운 엣지 서버로 트래픽이 라우팅되어 처리되도록 한다. 기대효과CDN을 적용하면 컨텐츠 요청이 매번 원본 서버에 직접 전달되지 않는다.1. 트래픽을 분산시키는 효과가 있다.2. 대규모 트래픽이 발생하더라도 안정적으로 컨텐츠를 제공할 수 있다.3. 물리적..

[프론트엔드] 프로토타입 상속의 동작 방식

프로토타입: 자바스크립트에서 객체 간의 상속을 구현하는 메커니즘이다. 자바스크립트의 모든 객체는 기본적으로 [[Prototype]]이라는 숨김 프로퍼티를 가지고 있으며, 이 프로퍼티는 다른 객체를 참조하거나 null 값을 가집니다. 프로토타입 연결은 Object.create()나 함수 생성자의 prototype 프로퍼티를 통해 이루어진다. -> 왜 프로토타입 상속이 필요할까?개발을 하다 보면 기존에 있는 기능을 가져와 확장해야 하는 경우가 생긴다.사람에 관한 프로퍼티와 메서드를 가진 user라는 객체가 있는데, user와 상당히 유사하지만 약간의 차이가 있는 admin과 guest 객체를 만들어야 한다고 가정했을 때"user의 메서드를 복사하거나 다시 구현하지 않고 user에 약간의 기능을 얹어 admi..

[그리디] 증가수열 만들기

입력첫째 줄에 자연수 N(3 출력첫째 줄에 최대 증가수열의 길이를 출력합니다. 두 번째 줄에 가져간 순서대로 왼쪽 끝에서 가져갔으면 ‘L', 오른쪽 끝에서 가져갔으면 ’R'를 써 간 문자열을 출력합니다.(단 마지막에 남은 값은 왼쪽 끝으로 생각합니다.) 문제풀이n = int(input())a = list(map(int, input().split()))lt = 0rt = n-1last = 0res = ""tmp = []while lt last: tmp.append((a[lt], 'L')) if a[rt] > last: tmp.append((a[rt], 'R')) tmp.sort() if len(tmp) == 0: break else: res = res + tmp[0][1] ..

공부/Python 2025.03.29

[그리디] 백준 2891번 카약과 강풍

문제2890번을 보면 알겠지만, 상근이는 카약 대회를 개최했다. 그런데, 갑자기 엄청난 강풍이 경기장에 불었고, 일부 카약이 부서졌다. 경기는 5분 안에 시작해야 하는 상황이다.다행히 일부 팀은 혹시 모를 사태에 대비해서 카약을 하나 더 경기장에 들고 왔다. 카약은 매우 무겁고 운반하기 어렵다. 따라서, 자신의 바로 다음이나 전에 경기하는 팀에게만 카약을 빌려주려고 한다. 즉, 팀 4는 여분의 카약을 3이나 5에게만 빌려줄 수 있다. 다른 팀에게서 받은 카약은 또 다른 팀에게 빌려줄 수 없다. 또, 카약을 하나 더 가져온 팀의 카약이 손상되었다면, 여분의 카약으로 경기에 출전하게되고, 이 카약은 다른 팀에게 빌려줄 수 없다.카약이 부서진 팀과 하나 더 가져온 팀이 주어진다. 카약을 적절히 빌렸을 때 출발..

공부/Python 2025.03.29

[그리디] 백준 1543번 문서 검색

문제세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한다. 예를 들어, 문서가 abababa이고, 그리고 찾으려는 단어가 ababa라면, 세준이의 이 함수는 이 단어를 0번부터 찾을 수 있고, 2번부터도 찾을 수 있다. 그러나 동시에 셀 수는 없다.세준이는 문서와 검색하려는 단어가 주어졌을 때, 그 단어가 최대 몇 번 중복되지 않게 등장하는지 구하는 프로그램을 작성하시오. 입력첫째 줄에 문서가 주어진다. 문서의 길이는 최대 2500이다. 둘째 줄에 검색하고 싶은 단어가 주어진다. 이 길이는 최대 50이다. 문서와 단어는 알파벳 소문자와 공백으로 이루어져 있다. 출력첫째..

공부/Python 2025.03.28

[백엔드] 연결 리스트, 포인터로 연결하여 관리

[연결리스트, 단일 연결 리스트(Singly Linked List)]연결리스트는 리스트 내의 요소(노드)들을 포인터로 연결하여 관리하는 선형 자료구조이다. 각 노드는 데이터와 다음 요소에 대한 포인터를 가지고 있다.첫 번째 노드를 HEAD, 마지막 노드를 TAIL연결 리스트는 메모리가 허용하는 한 요소를 계속 삽입할 수 있다. ->동적크기, 쉬운 삽입 삭제, 필요한 만큼 메모리 할당시각 복잡도는 탐색에는 O(n), 노드 삽입과 삭제는 O(1)라는 특징을 가지고 있다. 배열은 순차적인 데이터가 들어가기 때문에 메모리 영역을 연속적으로 사용한다.반면, 연결 리스트는 메모리 공간에 흩어져서 존재한다는 점에서 배열과 차이가 있다. [이중 연결 리스트(Doubly Linked List, Circular Linke..

[그리디] 백준 1931번 회의실 배정

문제한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다. 입력첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 231-1보다 작거나 ..

공부/Python 2025.03.27