그리디 알고리즘 Q www.acmicpc.net/problem/1439 1439번: 뒤집기 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모 www.acmicpc.net A bisect 라이브러리는 정렬된 배열에서만 사용해야 한다는 것은 알게 되었다. 나누기 2를 하고 ceil을 이용한다는 유연한 방식을 나도 계속 생각해보자! 처음 코드 from bisect import bisect_left, bisect_right from collections import Counter a = input() array = [0] * len(a) for i in range(..
1. 분리집합 서로소 집합이라고도 하는 분리집합(Disjoint Sets)은 공통 원소가 없는 두 집합을 말한다. 분리집합 자료구조에서는 union 연산과 find 연산을 사용한다. 시간복잡도는 O(V+M(1+logV))정도 이다. 코드는 다음과 같다. def find_parent(x): #루트 노드 탐색 if p[x] != x: p[x] = find_parent(p[x]) return p[x] def union(x, y): #합집합 x = find_parent(x) y = find_parent(y) if x
서로소 집합 알고리즘(분리 집합 알고리즘) Q www.acmicpc.net/problem/10775 10775번: 공항 예제 1 : [2][?][?][1] 형태로 도킹시킬 수 있다. 3번째 비행기는 도킹시킬 수 없다. 예제 2 : [1][2][3][?] 형태로 도킹 시킬 수 있고, 4번째 비행기는 절대 도킹 시킬 수 없어서 이후 추가적인 도킹은 불 www.acmicpc.net A 이중 반복문을 이용하여도 풀 수 있으나 시간초과가 된다. 따라서 분리집합 알고리즘을 이용하여야 한다. 코드 def find_parent(x): #루트노드 찾기 if p[x] != x: p[x] = find_parent(p[x]) return p[x] def union(x, y): #합집합 x = find_parent(x) y =..
다이나믹 프로그래밍 알고리즘 Q www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net A 다이나믹 프로그래밍으로 푸는 것은 점화식 세우기가 가장 중요하다. 코드 n = int(input()) array = list(list(map(int, input().split())) for _ in range(n)) d = [0]*16 #DP 테이블 초기화 for i in range(n): if i + array[i][0]
1. 데이터 모델링의 이해 - 단지 시스템 구현만을 위해 수행하는 것이 아니며, 시스템 구현을 포함한 업무분석 및 업무형상화를 하는 목적도 있다. - 현실세계를 일정한 형식에 맞추어 표현하는 추상화의 의미를 가질 수 있다. - 복잡한 현실을 제한된 언어나 표기법을 통해 이해하기 쉽게 하는 단순화의 의미를 가지고 있다. - 애매모호함을 배제하고 누구나 이해할 수 있도록 정확하게 현상을 기술하는 정확화의 의미를 가진다. - 정보시스템을 구축하기 위한 데이터 관점의 업무분석기법 - 현실세계의 데이터에 대해 약속된 표기법에 의해 표현하는 과정 - 데이터베이스를 구축하기 위한 분석, 설계의 과정 - 분석된 모델을 가지고 실제 데이터베이스를 생성하여 개발 및 데이터관리에 사용하기 위한 것 - 중복성 : 데이터베이스..
플로이드 워셜 알고리즘 Q www.acmicpc.net/problem/11403 11403번: 경로 찾기 가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오. www.acmicpc.net A 입력받는 것이 고민이였다. 입력이 여러 개로 들어오고, 케이스마다 달라질 수 있기 때문에 다른 리스트로 입력받았더니 내가 그걸 해결하지 못했다. 그냥 graph.append로 그래프에 넣어주는게 제일 쉽다. 코드 INF = int(1e9) n = int(input()) graph = [] for _ in range(n): graph.append(list(map(int, input().split()))) #입력을 그래프에 넣..