[알고리즘 - 완전탐색] 전력망을 둘로 나누기
개발 공부/알고리즘2023. 4. 13. 14:53[알고리즘 - 완전탐색] 전력망을 둘로 나누기

문제 문제 링크 풀이 문제를 푸는 여러 가지 방법이 있을 것 같았는데 간단한 방법으로 문제를 풀었다. 입력으로 간선 정보가 주어지므로 순회를 통해 하나씩 간선을 제외하고, 제외된 간선에 속한 노드를 각각 시작점으로 하여 그 시작점과 연결되어 있는 노드들의 합이 몇 개인지 카운트한다. 그리고 그렇게 카운트된 두 값의 차의 절댓값을 구한다. 이렇게 구한 절댓값의 최솟값을 계속해서 갱신해가면 모든 간선을 순회했을 때 가장 노드의 차이가 적을 때의 값을 구할 수 있다. 예를 들어 입력이 [[1,3],[2,3],[3,4],[4,5],[4,6],[4,7],[7,8],[7,9]] 라고 하면, 가장 먼저 [1, 3] 간선이 선택될 것이고 (그래프에서 해당 간선을 제외) 1번과 3번 노드를 분리해놓고 1번과 3번으로부터..

[객체지향의 사실과 오해] 부록 - 추상화 기법
스터디/자바2023. 4. 10. 18:38[객체지향의 사실과 오해] 부록 - 추상화 기법

추상화 기법 추상화 -> 도메인의 복잡성을 단순화하고 직관적 멘탈 모델을 만드는 데 사용할 수 있는 가장 기본적인 인지 수단 추상화 기법들은 복잡성을 낮추기 위해 사물의 특정한 측면을 감춘다 동일한 추상화 기법을 프로그램의 분석, 설계, 구현 단계에 걸쳐 일관성 있게 적용할 수 있다는 것이 객체지향이 갖는 장점 1. 분류와 인스턴스화 개념과 범주 객체를 분류하고 범주로 묶는 것은 객체들의 특정 집합에 공통의 개념을 적용하는 것을 의미함 분류 -> 세상에 존재하는 객체에 개념(타입)을 적용하는 과정 즉, 객체를 타입(개념)과 연관시키는 것 타입 객체가 타입에 속하는지 검증하기 위해 필요한 타입의 정의 3가지 심볼(타입의 이름), 내연(타입의 정의), 외연(타입에 속하는 객체들의 집합) 외연과 집합 외연은 ..

개발 공부/알고리즘2023. 4. 6. 01:15[알고리즘] 전화번호 목록

문제 문제 링크 풀이 예를 들어 phone_book 배열이 ["12","123","1235","567","88"] 처럼 주어졌을 때 1235에 12가 포함되므로 접두사가 되며 false가 정답이 된다. 이를 단순하게 확인하려면 모든 원소에 대하여 모든 다른 원소와 비교하면 문제는 해결되지만 시간복잡도가 O(n^2)이 되어 효율성 테스트에서 오답이 나오게 된다. O(n)에 문제를 해결하려면 한번만 순회하면서 답을 찾아야 한다. 이를 위해서는 각각의 자릿수에 대하여 더 작은 수가 앞에 오도록 정렬을 해주면 된다. 예를 들어 "12"와 "123" 이 있다면 "12", "123"으로 정렬을 해야 하고 "1"과 "123" 이 있다면 "1", "123"으로, "2"와 "24"와 "134"이 있다면 "134", "2..

[객체지향의 사실과 오해] 7장 - 함게 모으기
스터디/자바2023. 4. 5. 18:21[객체지향의 사실과 오해] 7장 - 함게 모으기

객체지향 설계 안에 존재하는 세 가지 상호 연관된 관점 개념 관점 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현 실제 도메인의 규칙과 제약을 최대한 유사하게 반영 명세 관점 소프트웨어로 초점이 옮겨짐 살아 움직이는 객체들의 책임에 초점. 즉, 객체의 인터페이스를 바라보게 됨 '무엇'을 할 수 있는가에 초점 구현 관점 실제 작업을 수행하는 코드와 연관 객체의 책임을 '어떻게' 수행할 것인가에 초점을 두고 필요한 속성과 메서드를 클래스에 추가 위 3가지 관점은 시간 순이 아니며, 동일한 클래스를 세 가지 다른 방향에서 바라보는 것을 의미 하나의 클래스 안에 세 가지 관점을 모두 포함하면서도 각 관점에 대응되는 요소를 명확하고 깔끔하게 드러낼 수 있어야 한다! 도메인 모델 -> 최종 코드 구현 과정 ..

[객체지향의 사실과 오해] 6장 - 객체 지도
스터디/자바2023. 4. 4. 16:09[객체지향의 사실과 오해] 6장 - 객체 지도

기능을 중심으로 구조를 종속시키는 적근법은 범용적이지 않고 재사용이 불가능하며 변경에 취약한 모델을 낳게 된다. 이와 달리 안정적인 구조를 중심으로 기능을 종속시키는 접근법은 범용적이고 재사용 가능하며 변경에 유연하게 대처할 수 있는 모델을 만든다. (중략) 자주 변경되는 기능이 아니라 안정적인 구조를 따라 역할, 책임, 협력을 구성하라. (p.180) 기능 설계 vs 구조 설계 성공적인 소프트웨어 -> 사용자가 원하는 새로운 기능을 빠르고 안정적으로 추가할 수 있다 이는 훌륭한 구조가 뒷받침되어 있기에 가능한 것 비록 최종 사용자들은 내부 구조를 볼 수 없지만, 좋은 설계는 사용자의 요구사항을 빠르게 반영할 수 있기에 중요하다 설계라는 행위를 중요하게 만드는 것은 변경에 대한 필요성이다 설계를 하는 목..

[객체지향의 사실과 오해] 5장 - 책임과 메시지
스터디/자바2023. 4. 4. 16:06[객체지향의 사실과 오해] 5장 - 책임과 메시지

자율적인 책임 자율적 객체 -> 스스로의 의지와 판단에 따라 각자 맡은 책임을 수행하는 객체 객체가 책임을 자율적으로 수행하기 위해선 -> 객체에게 할당되는 책임이 자율적이어야 한다 상세한 수준의 책임은 협력의 최종 목표는 만족시킬지 몰라도 객체가 가져야 하는 선택의 자유를 크게 훼손한다 이런 경우, 자신의 판단이 아닌 외부의 명령에 의존하게 된다 책임은 자율성을 보장할 수 있도록 포괄적이고 추상적이면서도 할 일을 명확하게 명시하는 것이어야 한다 '어떻게'가 아닌, '무엇'을 책임으로 사용하라 너무 추상적인 책임 단, 협력의 의도를 명확하게 표현하지 못할 정도로 추상적인 책임 역시 문제다 책임은 협력에 참여하는 의도를 명확하게 설명할 수 있는 수준 안에서 추상적이어야 한다 책임의 적합성은 협력이 무엇인지..

[알고리즘 - 그래프] 다익스트라 - 가장 먼 노드
개발 공부/알고리즘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를 찾을 때 까지 이 과정을 반복한다 탐색에 사용하는 자료구조에 따른 탐색 순서 ..

image