전체 글 132

[Python 3] BOJ 31423: 신촌 통폐합 계획

이번 SUAPC WINTER 2024에 나왔던 H번 문제, 신촌 통폐합 계획이였다. (다음 번에 SUAPC에 대해서 게재해보겠습니다.) https://www.acmicpc.net/problem/31423 31423번: 신촌 통폐합 계획 첫 번째 줄에 대학교의 개수 $N$이 주어진다. $(2 \leq N \leq 500 \, 000)$ 다음 $N$개의 줄의 $i$번째 줄에 대학교 이름을 의미하는 알파벳 소문자로 이루어진 문자열 $s_i$가 주어진다. 주어지는 대학교 www.acmicpc.net 처음에 이 문제를 봤을 때, 직관적인 풀이인 단순한 DFS로 접근했다. import sys sys.setrecursionlimit(int(5*1e5+1)) input=sys.stdin.readline n=int(in..

Port, URI

포트란 네트워크 통신의 종단점이고, 앱 별로 용도들이 구별되는 논리적인 통로라고 할 수 있다. 즉, 하나의 IP 주소에 여러개의 프로그램이 구동 중이거나, 여러개의 기기가 공유기로 묶여있을 때 개념하는 개념이다. 0번부터 65535번까지 총 65536개의 포트가 있다. 이는 3가지로 분류가 된다. 0번부터 1023까지는 Well Known Ports로, 표준처럼 정해져 있는 포트이다. 22번은 SSH, 53번은 DNS, 80번은 HTTP이다. 1024번부터 49151번까지는 Registered Ports로, 특정 앱 제작사들이 포트 등록을 요청하여 사용되는 포트이다. 49152부터 65535번까지의 포트는 동적인 포트이다. 포트 포워딩을 통해 네트워크 게이트를 지날 때, IP 주소와 포트 번호 결합의 통..

OSI, TCP/UDP

OSI (Open Systems Interconnection) 7계층: 컴퓨터와 컴퓨터 사이에 데이터를 주고받는 통신이 일어날 때 (각 컴퓨터를 호스트라고 부름) OSI 계층을 통해서 시각적으로 통신이 일어나는 과정을 파악할 수 있다. 1계층 : 물리 계층 (Physical Layer): 하드웨어 전송 기술. 케이블, 리피터, 허브 등의 장비로 이루어짐. 물리적으로 데이터를 전송하는 역할을 함. 2계층: 데이터 링크 계층 (Data Link Layer): 물리 계층을 통해서 데이터가 제대로 도착하지 못하는 오류를 감지하고 제어함. 브릿지나 스위치를 통해서 LAN 카드에 내장된 물리적 주소인 MAC 주소를 가지고 정보를 주고 받는데, 이때 데이터 링크 계층에서 전송되는 데이터의 단위를 '프레임'이라고 함...

[Python 3] BOJ 23743 방탈출

굉장히 재밌게 풀었던 MST 문제였다. 방들끼리의 연결 관계가 주어져있고, 이들 사이에 워프를 만들 수 있는 시간이 주어져 있다. 또한, 바로 밖으로 나갈 수 있는 긴급 탈출구 설치에 걸리는 시간이 주어져 있다. 이들을 단순히 "두 점 사이의 간선의 길이"라고 표현하겠다. 이 문제의 예제 입력의 상황을 그림으로 표현해보겠다. 첫 번째 예제이다. 1번, 2번, 3번 긴급 탈출로 탈출하는 것 보다, 세 개의 간선 (1-2, 2-3, 3-1) 중 두 개를 선택하고, 3 정점 중 한 개의 긴급탈출을 만들어서 탈출하면 총 7의 minimum cost가 발생한다. 이 경우에는 1과 2 사이에 있는 간선을 선택하고, 1과 2의 정점 중 한 개의 비상탈출구를 만든다. 3은 탈출 할 수 있는 방법이 없기 때문에, 무조건..

MVC

MVC 패턴이란 모델, 뷰, 컨트롤러 영역으로 각각 세 가지 영역으로 분할하여 각 요소에 고유의 역할이 부여되는 방식이다. 모델은 데이터를, 뷰는 사용자에게 보이는 UI, 컨트롤러는 비즈니스 로직 처리를 맡는다. 모델은 앱이 무엇을 할 건지 역할을 정의한다. 필요한 정보에 따라, 기능과 데이터를 정의한다. 뷰는 모델에서 받아온 데이터, 사용자의 결괏값을 화면으로 보여주는 역할을 하는데, 뷰는 여기서 출력을 해주는 역할만 한다. 마지막으로 컨트롤러는 모델과 뷰 사이를 연결하여 작동순서, 모델 처리에 대한 지시를 맡아서 한다. 웹 개발자들은 MVC를 통해 한 부분을 업데이트하고, 관리, 수정할 때 모든 부분을 바꾸는 것이 아니라, 각자 컴포넌트들이 독립적이기 때문에 한 부분만 해도 된다는 장점이 있다. 이런..

[Python 3] LEETCODE 4 Median of Two Sorted Arrays

최근, LEETCODE라는 웹 사이트에서 알고리즘 공부를 하고 있다. 백준 온라인 저지는 조금 "구현"적인 느낌이 강하고, 문제에 미사여구 (재미를 주는 부분) 또한 많다. 한국어로 이루어져 있기에 조금 더 문제 읽기가 좋다. 그러나 Leetcode에서는 이 보다는 알고리즘 그 자체를 더욱 강하게 다루는 느낌이다. 같은 알고리즘이라고 하더라도, 분명히 문제가 주는 느낌이 다르다. 결코 같은 문제를 푼다는 느낌이 안 든다. 조금 더 코딩 인터뷰나, 이해도를 키우기 위해서는 반드시 Leetcode도 풀어봐야겠다, 라는 생각을 했다. 아직까지 풀었던 Leetcode 문제는 Easy나 Medium 난이도였는데, 처음으로 Hard 난이도를 자랑하는 문제를 마주쳤다. 번역을 해보자면, 2개의 정렬된 배열 nums1..

Cache / Cookie / Session

캐시 (Cache)란 이전에 사용한 데이터를 보관하는 사용자 저장 공간이다. 웹 사이트, 앱 등에서 재사용할 수 있는 데이터를 캐시에 저장하여 서버에 재요청 시 시간과 비용을 절약할 수 있다. 캐시는 원래 컴퓨터의 처리 속도를 빠르게 하기 위하여, 연산의 결괏값과 재사용할 데이터를 CPU의 캐시메모리에 저장하여 RAM와 CPU의 속도의 차이를 줄이는 것을 의미하였다. 현재 이 글에서 다루는 캐시는 컴퓨터 아키텍처에서의 캐시가 아닌, 웹과 앱에서의 캐시이다. 사용자가 웹 서버에 데이터를 요청할 때, 사용자의 캐시에서 캐시 데이터를 찾는다. 만약 캐시에서 데이터가 없거나, 만료되었으면, 기존 방식대로 서버에 정보를 요청하는데, 이를 캐시 미스 (Cache Miss)라고 한다. 만약 캐시에서 사용 가능한 데이..

CSR, SSR

렌더링 (Rendering)이란 웹 페이지를 구성하는 HTML, CSS 의 파일을 브라우저 위에 그려 주는 것을 의미한다. 여기서 크게 두 가지 방법으로 나뉜다. CSR (Client Side Rendering)은 클라이언트 단에서 렌더링을 수행한다. 사용자가 웹사이트에 접근 할 때, 웹사이트에서 자공하는 페이지의 HTML, CSS의 리소스를 클라이언트에서 다운로드하고, 페이지 전환을 처리한다. CSR의 경우 서버는 페이지가 맨 처음 렌더링 될 때 웹 리소스 파일을 제공하는 역할, 그리고 페이지 로딩이 이루어진 후 클라이언트 측에서 요청한 데이터를 전송해주는 역할만을 수행해준다. 사용자가 페이지를 요청하면 해당 페이지의 HTML 파일을 서버가 보내준다. CSR 방식은 클라이언트 단에서 동적으로 구성하기 ..

[Python 3] BOJ 25759 들판 건너가기

오늘의 문제는 들판 건너가기라는 문제이다. 굉장히 간단하고 명료한 문제이다. 문제를 보자마자 DP를 써야겠다라는 생각이 들었다. 하지만, 구체적으로 어떤 방안을 사용해서 구현해야할지 고민이 되었다. "아름다움 값 A_i"이 100개밖에 없는 상황이다. 이를 역이용해서 DP를 구현해보았다. n=int(input()) data=[0]+list(map(int,input().split())) dp=[-1e10 for _ in range(101)] dp[data[1]]=0 for i in range(2,n+1): for j in range(1,101): if dp[j]!=-1e10: dp[data[i]]=max(dp[data[i]],dp[j]+(data[i]-j)**2) print(max(dp)) dp 테이블을 ..

반응형/적응형 웹 , DOM, 크롤링 (robots.txt)

반응형 웹은 웹 페이지가 모든 화면 크기에서 잘 렌더링되도록 하는 웹 디자인 접근 방식이다. 기존에는 PC와 같은 모니터에서 사용되는 웹사이트들이 대부분을 이루었지만, 현재는 핸드폰과 태블릿 등 다양한 디바이스들이 생겼다. 그렇기 때문에 반응형 웹을 통해 모든 디바이스에서 원활하게 웹사이트가 렌더링 될 수 있다. RWD라고도 불린다. 감지된 화면 크기에 따라 자동으로 페이지가 재배열된다. 이에 반해 적응형 웹은 정적인 사이즈로 만들어진 웹사이트로, 웹사이트의 크기가 변경될때 변경되지 못한다. 그렇기에 디자이너가 이미 다양한 몇 가지의 화면 너비에 따라서 화면을 미리 만들어두고, 제일 적절한 화면을 보여주는 식으로 웹사이트를 렌더링한다. DOM (문서 객체 모델, Document Object Model)이..