[알고리즘 - 그래프] 다익스트라 - 가장 먼 노드
개발 공부/알고리즘2023. 3. 30. 12:48[알고리즘 - 그래프] 다익스트라 - 가장 먼 노드

문제 문제 링크 풀이 이 문제는 하나의 노드에서 다른 모든 노드까지의 최소 경로를 구하는 문제로 다익스트라 알고리즘을 이용해 풀이할 수 있다. 다익스트라 알고리즘 다익스트라 알고리즘은 아래와 같은 방식으로 동작한다. 출발 노드 설정 최단 거리 테이블 초기화 방문하지 않은 && 최단 거리가 가장 짧은 노드를 선택 3에서 선택한 노드를 거쳐 다른 노드로 가는 비용을 계산해 최단 거리 테이블을 갱신 끝날 때 까지 3, 4번 과정을 반복 문제의 테스트 케이스에 적용 1번 노드부터 나머지 노드로의 최단 경로를 구하는 문제이므로 출발 노드는 1번으로 설정 간선에 가중치가 없으므로 출발노드와 이웃하는 노드까지의 거리를 1로 설정 방문하지 않은 노드 중 최단 경로가 최소인 2(또는 3)번 노드를 선택 이웃한 노드의 최..

[객체지향의 사실과 오해] 4장 - 역할, 책임, 협력
스터디/자바2023. 3. 26. 16:34[객체지향의 사실과 오해] 4장 - 역할, 책임, 협력

객체지향에 갓 입문한 사람들의 가장 흔한 실수는 협력이라는 문맥을 고려하지 않은 채 객체가 가져야 할 행동부터 고민하기 시작한다는 것이다. 중요한 것은 개별 객체(의 행동이나 상태)가 아니라 객체들 사이에 이뤄지는 협력이다. 협력이 자리를 잡으면 저절로 객체의 행동이 드러나고 뒤이어 적절한 객체의 상태가 결정된다. (p.109) 협력 요청과 응답 협력은 한 사람이 다른 사람에게 도움을 요청할 때 시작됨 요청을 받은 사람은 지식 또는 서비스를 제공함으로서 요청에 응답 요청에 응답하는 과정에서 다시 다른 사람에게 요청을 보내야될 수도 있음 즉, 협력은 다수의 연쇄적인 요청 & 응답의 흐름으로 구성 어떤 사람이 특정한 요청을 받아들일 수 있는 이유는, 그 요청에 대해 적절한 방식으로 응답하는 데 필요한 지식과..

[알고리즘 - graph] 네트워크
개발 공부/알고리즘2023. 3. 23. 12:31[알고리즘 - graph] 네트워크

문제 이해 문제 링크 문제에 int[][]computers 배열로 컴퓨터의 연결에 대한 정보가 주어진다. 서로 연결된 컴퓨터들은 하나의 네트워크를 이룬다고 할 때 총 네트워크의 개수를 구하는 문제이다. 예를 들어 연결이 아래와 같다면 네트워크는 2개이고 아래와 같다면 네트워크는 1개가 된다. 풀이 이 문제는 전형적인 그래프 탐색 문제로, visited 배열에 방문한 노드들을 저장하면서 노드를 탐색해나가는데, 새로운 네트워크가 발견될 때마다 해당 네트워크에 연결된 모든 노드를 탐색 상태로 만들어둔다. 이렇게 하면 아직 탐색되지 않은 노드가 발견된다는 의미가 새로운 네트워크를 발견한다는 의미와 같아지므로 그때마다 count를 증가시켜서 총 네트워크의 개수를 확인할 수 있다. public int solutio..

[알고리즘] graph와 탐색
개발 공부/알고리즘2023. 3. 21. 17:07[알고리즘] graph와 탐색

비선형 자료구조 선형으로 표현할 수 없는 데이터를 표현할 때 사용되는 자료구조 예를 들어 지하철 노선도와 같이 하나의 선으로 표현할 수 없는 데이터를 표현하고자 할 때 사용된다 대표적으로 graph가 비선형 구조이다 graph 데이터를 갖는 Node와 Node들을 이어주는 Edge로 구성 Edge는 단방향 / 양방향의 방향성을 가질 수 있다 Edge는 가중치를 가질 수 있다 데이터의 탐색 선형 자료구조와 달리 비선형 구조는 시작과 끝이 모호하다 따라서 먼저 하나의 Node를 탐색하고 해당 Node와 Edge로 연결된 Node들을 탐색한다 연결된 Node들은 Queue / Stack 등에 넣어 탐색을 예약해둔다 원하는 Node를 찾을 때 까지 이 과정을 반복한다 탐색에 사용하는 자료구조에 따른 탐색 순서 ..

[객체지향의 사실과 오해] 3장 - 타입과 추상화
스터디/자바2023. 3. 20. 17:37[객체지향의 사실과 오해] 3장 - 타입과 추상화

초기의 지하철 노선도는 실제와 유사한 물리적인 지형 위에 구불구불한 운행 노선과 불규칙적인 역 간의 거리를 사실적으로 묘사하고 있었다. 문제는 이렇게 사실적인 정보가 오히려 지하철을 이용하는 승객들로 하여금 노선도를 이해하기 어렵게 만들었다는 점이다. (p.73) 해리 벡은 승객이 꼭 알아야 하는 사실만을 정확하게 표현하고 몰라도 되는 정보는 무시함으로써 이해하기 쉽고 단순하며 목적에 부합하는 지하철 노선도를 창조해 낼 수 있었다. (p.75) 추상화를 통한 복잡성 극복 진정한 의미에서 추상화란 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 놀라운 본질을 드러나게 하는 과정 불필요한 부분을 무시해 현실에 존재하는 복잡성을 극복하는게 추상화의 목적 훌륭한 추상화는 목적에 부합하는 것이어야 한다 추상..

[객체지향의 사실과 오해] 2장 - 이상한 나라의 객체
스터디/자바2023. 3. 20. 14:51[객체지향의 사실과 오해] 2장 - 이상한 나라의 객체

세상을 더 작은 객체로 분해하는 것은 본질적으로 세상이 포함하고 있는 복잡성을 극복하기 위한 인간의 작은 몸부림이다. 인간은 좀 더 단순한 객체들로 주변을 분해함으로써 자신이 몸담고 있는 세상을 이해하려고 노력한다. (p.41) 객체지향 패러다임의 목적은 현실 세계를 모방하는 것이 아니라 현실 세계를 기반으로 새로운 세계를 창조하는 것이다. (중략) 현실 세계에서는 사람이 직접 주문 금액을 계산하지만 소프트웨어 세계에서는 주문 객체가 자신의 금액을 계산한다. (p.42) 객체의 정의 객체의 다양한 특성을 효과적으로 설명하기 위해서는 객체를 상태, 행동, 식별자를 지닌 실체로 보는 것이 가장 효과적이다. (p.47) 객체란 식별 가능한 개체 또는 사물이다 객체는 자동차처럼 만질 수 있는 구체적 사물일 수도..

[알고리즘 - DP] 프로그래머스 - 등굣길
개발 공부/알고리즘2023. 3. 16. 00:25[알고리즘 - DP] 프로그래머스 - 등굣길

문제 문제 링크 풀이 문제 이해 아래와 같은 m x n 크기의 격자가 있을 때, 가장 왼쪽 위 (1, 1) 에서 가장 우측 아래쪽 (m, n) 으로 가는 방법의 개수를 구하는 문제이다. (1,000,000,007로 나눈 나머지 반환) 단, 이때 위 그림에서처럼 웅덩이가 있는 곳은 지나가지 못한다. 입력으로는 격자의 크기 m, n과 웅덩이의 좌표가 [[2, 2]]와 같은 형태로 puddles 이름으로 제공된다. 풀이 방법 문제에서 우측 및 아래로 움직이는 경로만 가능하다고 했으므로 (1, 1)에서 시작하여 (m, n)까지 우측 및 아래로 한 칸씩 이동하며 경로의 개수를 계산한다. 이때, 예를 들어 (3, 3)까지의 경로 경우의 수는 아래와 같이 (2, 3) 까지의 경로 경우의 수와 (3, 2) 까지의 경로..

[객체지향의 사실과 오해] 1장 - 협력하는 객체들의 공동체
스터디/자바2023. 3. 13. 17:29[객체지향의 사실과 오해] 1장 - 협력하는 객체들의 공동체

서론 객체지향으로 향하는 4가지 걸음 클래스가 아니라 객체를 바라보는 것 개체를 독립적인 존재가 아니라 기능을 구현하기위해 협력하는 공동체의 존재로 바라보는 것 협력에 참여하는 객체들에게 적절한 역할과 책임을 부여하는 것 위 개념들을 사용하는 프로그래밍 언어라는 틀에 잘 담아내는 기술을 익히는 것 1장 실세계의 모방이라는 개념은 객체지향의 기반을 이루는 철학적인 개념을 설명하는 데는 적합하지만 유연하고 실용적인 관점에서 객체지향 분석, 설계를 설명하기에는 적합하지 않다. (중략) 객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다. 소프트웨어 개발자의 역할은 단순히 실세계를 소프트웨어 안으로 옮겨 담는 것이 아니라 고객과 사용자를 만족시킬 수 있는 신세계를 창조하는 것..

[Spring Security] 웹 시큐리티
개발 공부/Spring2023. 3. 10. 00:42[Spring Security] 웹 시큐리티

스프링 시큐리티 ignoring() 아래와 같이 index 페이지에 css를 적용하고 다시 요청을 해보자. Hello #hello { font-size: 100px; } css로 폰트 크기를 변경했음에도 실제로는 반영이 되지 않은 것을 확인할 수 있다. 개발자 콘솔로 요청과 응답 상태를 확인해보면, css 파일을 요청하는데 302(리다이렉션) 코드가 뜨고 login 페이지를 추가로 요청한 것을 확인할 수 있다. 이는 WebSecurityConfigurerAdapter를 통해 시큐리티를 설정할 때 지정한 경로 외의 모든 요청은 인증을 받도록 했기 때문에 정적 리소스를 요청하는 경로 또한 인증을 필요로 하게 되었기 때문에 발생하는 문제이다. 이를 해결하기 위해서는 시큐리티 필터가 적용되지 않도록 ignori..

[자바 스터디] 15주차 : 람다식
스터디/자바2023. 2. 27. 15:05[자바 스터디] 15주차 : 람다식

람다식이란 람다식은 자바 8에서 추가된 문법으로 자바에서 함수형 프로그래밍을 지원하기 위해 도입되었다. 람다식 람다식은 메서드를 하나의 식 (Expression) 으로 표현한 것으로, 아래와 같이 작성된다. // 기존 메서드 int sum(int a, int b) { return a + b; } // 람다식 (a, b) -> a + b 위 코드에서 볼 수 있듯 람다식으로 메서드를 작성하면 이름이 사라지기 때문에 익명 함수 라고 부른다. 람다식을 사용하면 기존에 메서드를 작성하기 위해 클래스를 만들고, 메서드 시그니처를 작성하는 등의 과정 없이 단순히 식 (Expression) 하나만으로 메서드를 만들고 사용할 수 있다. 함수형 프로그래밍 함수형 프로그래밍에는 아래와 같은 큰 특징들이 있다. 1. 순수 함..

image