Posts
-
CS
[디자인 패턴] 1. Iterator
디자인패턴의 목표 중 하나는 프로그램의 재사용이다.따라서 프로그램을 '부품'으로 재사용할지 생각하는 것이 목적이다. 구체적 클래스만 사용하면 클래스 사이의 결합이 강해져 부품으로 재사용하기 어려워진다.즉, 추상 클래스나 인터페이스를 사용하여 프로그래밍하는 것은 매우 중요하다.이터레이터 패턴은 컬렉션(Collection)의 내부 표현 방식을 노출하지 않고, 그 컬렉션의 요소들을 순차적으로 접근할 수 있는 방법을 제공하는 디자인 패턴이다. 사용 배경다양한 종류의 컬렉션(예: 배열, 리스트, 해시 테이블 등)을 동일한 방식으로 순회하고 싶지만, 각 컬렉션의 내부 구조(배열의 인덱스, 리스트의 노드 등)가 너무 복잡해서 외부에서 쉽게 접근하기 어렵거나, 컬렉션의 변경 시 순회 코드도 함께 변경되어야 하는 문제가..
-
Java
instanceof이란
객체가 특정 클래스(또는 인터페이스)의 인스턴스인지 확인하는 연산자결과는 true 또는 false를 반환한다. 예시String str = "hello";Integer num = 10;// String 타입인지 확인System.out.println(str instanceof String); // trueSystem.out.println(num instanceof String); // false// Object 타입인지 확인 (모든 클래스는 Object의 자식)System.out.println(str instanceof Object); // trueSystem.out.println(num instanceof Object); // true class Animal {}class Dog extend..
-
Java
replaceAll()과 정규표현식
replaceAll()public String replaceAll(String regex, String replacement)첫 번째 인자는 항상 정규표현식으로 해석정규표현식(regex)과 일치하는 모든 부분을 새로운 문자열로 치환\ 사용 예시String str = "Hello 123 World 456";// 모든 숫자를 제거String result1 = str.replaceAll("\\d+", "");// 결과: "Hello World "// 공백을 하이픈으로 치환String result2 = str.replaceAll("\\s+", "-");// 결과: "Hello-123-World-456"// 특정 단어 치환String result3 = str.replaceAll("World", "Java");/..
-
Algorithm
위상정렬
https://velog.io/@kimdukbae/%EC%9C%84%EC%83%81-%EC%A0%95%EB%A0%AC-Topological-Sorting [알고리즘] 위상 정렬 (Topological Sorting)정렬 알고리즘의 일종으로, 순서가 정해져 있는 일련의 작업을 차례대로 수행해야 할 때 사용할 수 있는 알고리즘이다.조금 더 이론적인 설명은, 사이클이 없는 방향 그래프의 모든 노드를 '방velog.io위 글에서 너무 정리를 잘 해주셨다. 들어가서 보는 것을 추천한다.진입차수가 0인 노드를 큐에 넣는다.큐가 빌 때까지 다음 과정을 반복한다.1. 큐에서 원소를 꺼내 해당 노드에서 나가는 간선을 그래프에서 제거2. 새롭게 진입차수가 0이 된 노드를 큐에 삽입 위상 정렬을 수행할 수 있는 그래프는 사..
-
Algorithm
최소 스패닝 트리(Minimum Spanning Tree, MST)
참고 자료 알고리즘 - 크루스칼 알고리즘(Kruskal Algorithm), 최소 신장 트리(MST)##chanhuiseok.github.io🌐 MST란? 최소 스패닝 트리 == 최소 신장 트리 도시들을 최소 비용으로 연결하는 도로망을 만드는 것과 같다.모든 도시를 연결하되, 총 건설 비용을 최소화하는 것이 목표라고 할 수 있다.3개의 도시가 있다고 가정: 1번 도시 - 2번 도시: 비용 1 2번 도시 - 3번 도시: 비용 2 1번 도시 - 3번 도시: 비용 3 특징그래프의 모든 정점을 연결사용된 간선의 가중치 합이 최소사이클을 포함하지 않음정점 n개 → 간선은 반드시 (n-1)개 대표적 알고리즘크루스칼 알고리즘 (Kruskal's Algorithm)간선 중심 접근모든 간선을 가중치 오름차순 정렬가장 ..
-
By Python
[Python] 백준 1003번 피보나치 함수
https://www.acmicpc.net/problem/1003t = int(input())dp = [[1,0], [0,1]]for i in range(2, 41): dp.append([dp[i-1][0] + dp[i-2][0], dp[i-1][1] + dp[i-2][1]])for _ in range(t): test_case = int(input()) print(dp[test_case][0], dp[test_case][1]) fibo(0) = [1, 0] fibo(1) = [0, 1] fibo(2) = [1, 1] fibo(3) = [1, 2] fibo(4) = [2, 3] ... 이런 식으로 fibo(n) = [fibo(n-1)의 0의 개수 + fibo(n-2)의 0의 개수, fibo..
-
By Python
[Python] 백준 2644번 촌수계산
https://www.acmicpc.net/problem/2644from collections import dequen = int(input())p1, p2 = map(int, input().split())m = int(input())family = dict()visited = [0] * (n+1)for _ in range(m): n1, n2 = map(int, input().split()) if n1 not in family: family[n1] = [n2] else: family[n1].append(n2) if n2 not in family: family[n2] = [n1] else: family[n2].append(n1)#..
-
By Python
[Python] 백준 2302번 극장 좌석
https://www.acmicpc.net/problem/2302 문제 해결 시간 : 35분 요새 백준 푸는 게 재밌어지고 있는 중이다. 전에는 그냥 문제만 봐도 스트레스였는데...아무튼 이 문제는 처음 봤을 때 이게 뭐지 싶었다.뭔가 조합으로 구하는 문제인가? 하고 살펴봤지만 번호에서 해당 자리 포함 양옆까지만 되기 때문에 조합으로 구하는 문제는 아닌 거 같았다.1234이렇게 있을 때 1은 1, 22는 1,2,33은 2,3,44는 3,4이런 식으로 앉을 수 있다는 게 이 문제의 내용이다. 여기에 더해 VIP 좌석이라는 개념이 있는데 VIP는 지정석으로 해당 자리에만 앉을 수 있다.말 그대로 고정 좌석이었다. 예시를 살펴보면 9개의 좌석이 있고 4와 7번의 자리가 VIP 좌석으로 고정되어 있다.이때 4와..