본문 바로가기

728x90

전체 글

[알고리즘] 프로그래머스 '의상' 프로그래머스 의상 문제는 조합론과 곱의 법칙을 활용해 효율적으로 해결할 수 있는 알고리즘 문제입니다. 이 포스트에서는 문제를 간단히 소개하고, 곱의 법칙과 조합론을 활용해 문제를 어떻게 접근할 수 있는지 살펴보겠습니다. 문제 소개문제 설명각 의상에는 이름과 종류가 있습니다.서로 다른 의상을 조합해 입을 수 있는 모든 경우의 수를 계산합니다.단, 하루에 최소 하나의 의상은 입어야 합니다.입력 예시String[][] clothes = {// { value , 타입 } {"yellow_hat", "headgear"}, {"blue_sunglasses", "eyewear"}, {"green_turban", "headgear"}};출력위 입력에서는 총 5가지의 조합이 가능합니다:yellow_hat.. 더보기
[알고리즘] 슬라이딩 윈도우 /* 슬라이딩 윈도우 */슬라이딩 윈도우는 전체 데이터에서 특정 구간의 값을 지속적으로 계산하는 문제에서 사용됩니다. 구간의 시작과 끝을 조정하며 데이터 처리를 최소화해 효율성을 높입니다.작동 방식처음에 윈도우 내 데이터를 모두 처리해 초기 값을 계산합니다.이후 윈도우를 한 칸씩 이동하며, 새로 들어오는 데이터를 추가하고, 이전 데이터를 제거합니다.반복적으로 윈도우를 이동하면서 원하는 값을 갱신합니다./* 슬라이딩 윈도우의 장점 */효율성: 중복 계산을 방지하며, 연속된 구간에 대해 데이터를 재활용하여 O(n)의 시간복잡도를 가질 수 있습니다.간결성: 문제를 단순화하고 가독성을 높이는 코드 작성이 가능합니다.다양한 활용: 배열, 문자열, 또는 다른 선형 데이터에서 부분합, 최댓값, 최솟값, 특정 패턴 탐.. 더보기
[알고리즘] Tajan Algorithm. 타잔 알고리즘 SCC /* 타잔 알고리즘 */타잔 알고리즘은 강한 연결 요소 (SCC: Strongly Connected Components)를 찾는 데 사용되는 효율적인 알고리즘입니다. SCC: 방향 그래프에서 모든 노드가 서로 연결되어 있는 부분 그래프를 의미합니다. 예를 들어, A → B → C → A와 같이 한 노드에서 다른 모든 노드로 도달할 수 있는 경우, 해당 노드 집합은 SCC로 간주됩니다. 이 알고리즘은 DFS(깊이 우선 탐색)를 기반으로 동작하며, 한 번의 DFS로 모든 SCC를 찾을 수 있어 시간 복잡도가 O(V + E)인 매우 효율적인 알고리즘입니다./* 핵심 개념 */타잔 알고리즘은 DFS 탐색 중 두 가지 배열(ids, low)을 사용하여 SCC를 판별합니다.ids 배열:각 노드가 DFS에서 방문된.. 더보기
[Spring] 스프링의 작동 원리 /* 서블릿 컨테이너와 스프링 컨테이너 WEB 요청이 들어올 때*/ 서블릿 컨테이너와 디스패처 서블릿 (DispatcherServlet)HTTP 요청이 들어오면 서블릿 컨테이너(예: Tomcat)가 이를 받아들이고, 스프링 MVC의 엔트리 포인트인 DispatcherServlet으로 요청을 전달합니다. DispatcherServlet은 스프링의 핵심 컴포넌트로, 모든 요청을 받고 필요한 처리를 이어가는 역할을 합니다.스프링 컨테이너와 빈 관리DispatcherServlet이 요청을 받으면, 요청을 처리할 **핸들러 매핑 (Handler Mapping)**을 찾아 알맞은 컨트롤러 (Controller) 빈을 결정합니다. 이 과정에서 스프링 컨테이너에 미리 정의된 빈 (Bean)들이 활용됩니다. 빈은 스프링.. 더보기
[DB] 트랜잭션 격리수준 Isolation Level /* 트랜잭션 격리수준*/트랜잭션의 격리수준 (Isolation Level) 이란 여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 여부를 결정하는 것이다. 트랜잭션의 격리 수준은 격리 수준이 높은 순서대로SerializableRepeatable ReadRead CommitedRead Uncomitted로 나뉘어 진다./* Serializable */Serializable 격리 수준은, 이름 그대로 트랜잭션들을 순차적으로 진행시킨다. 여러 트랜잭션이 동일한 레코드에 동시 접근할 수 없게 막으므로, 어떠한 데이터 부정합 문제도 발생하지 않는다. 하지만, 트랜잭션이 순차적으로 처리되어야 하므로 동시 처리 성능이 매우 떨어진다.Seriali.. 더보기
[HTTP] DNS /* DNS (도메인 네임 서버) */인터넷에서 모든 장치는 고유 IP주소를 가지고 있다. 하지만 우리는 정작 웹사이트에 접속을 할 때 IP주소를 이용하지 않고 도메인 이름을 사용한다. 이유는 도메인 이름을 더 쉽게 기억할 수 있기 때문이다. 따라서, 도메인을 실제 처리를 하기 위해서는 IP주소로 바꿔야 하는데 이를 가능하게 하는 시스템을 DNS라고 한다./* DNS 프로세스 과정 */1. 기지국 DNS 서버 (Local DNS Server)URL에 도메인 이름을 검색하면 해당 IP를 찾기위해 가장 먼저 찾는 DNS 서버입니다.컴퓨터의 LAN 선을 통해 인터넷이 연결되면, 인터넷을 사용할 수 있게 IP를 할당해주는 통신사 (KT, SKT, LG ..)에 해당하는 각 통신사의 DNS서버가 등록됩니다.  ".. 더보기
[운영체제] 병행성 /* 병행성 Concurrency*/동시에 실행하는 것 처럼 보여진다. (실제로는 짧은 시간 동안 작업들이 번갈아 가며 실행되는 것처럼 보인다.)병렬성 (Parallelism) 은 실제로 동시에 실행이 된다. 멀티코어에서 멀티 스레드를 동작시킨다.스레드 들은 동시에 메모리에 접근하게 되는데 이를 조정하지 않으면 문제가 될 수 있다. 주요 개념프로세스: 운영체제에서 실행되는 프로그램. 각 프로세스는 독립적인 메모리 공간을 가진다.스레드: 프로세스 내부에서 실행되는 작은 실행 단위. 한 프로세스 내에 여러 스레드가 존재할 수 있으며, 메모리를 공유한다. 스레드 생성시 스택을 생성한다. 즉, 스택은 공유하지 않는다.두 스레드가 하나의 프로세스에서 실행 중이라면 Context Switch를 통해 교체 된다. (.. 더보기
[HTTP] OSI 7계층 /* OSI 7계층 */OSI 7계층은 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것을 말한다.계층을 나눈 이유는 통신이 일어나는 과정을 단계별로 파악할 수 있기 때문이다. 예시)PC방에서 오버워치를 하는데 연결이 끊겼다. 어디에 문제가 있는지 확인하기 위해서는 모든 PC가 문제가 있다면 라우터의 문제(3계층 네트워크 계층)이거나 광랜을 제공하는 회사의 회선 문제(1계층 물리 계층) 한 PC만 문제가 있고 오버워치 소프트웨어에 문제가 있다면(7계층 어플리케이션 계층) 오버워치 소프트웨어에 문제가 없고, 스위치에 문제가 있으면(2계층 데이터링크 계층) 있다고 판단해 다른 계층에 있는 장비나 소프트웨어를 건들이지 않는것이다. (인용: https://shlee0882.tistory.com/110) .. 더보기

728x90