전체 글
[Object Oriented S/E] Chapter 7 - Deriving Use Cases from Requirements
# 범위 172 page ~ # 내용 ## 7 Deriving Use Cases from Requirements 요구사항은 시스템이 반드시 제공해야하는 기능이다. 요구사항 선언문은 시스템이 무슨 기능을 제공해야하는지에 관한 선언문이며, 어떻게 시스템이 그것들을 전달한것인지에 대한 것이 아니다. Use-case는 비즈니스 도메인에 대해서 부족한 통찰력과 이해로 생기는 유저와의 불일치에 대한 해답을 제공한다. ## 7.1 WHAT IS AN ACTOR? 시스템은 요청을 받고 유저로부터 입력등 받는다. 그리고 결과를 유저에게 전달한다. 전통적으로 유저는 "human(인간)"유저를 나타냈다. 더 넓은 스코프에서 유저는 인간과 비인간 모두를 나타낸다. 그리고 이를 표현하는 중립적인 단어가 필요하다. Actor는 ..
[백준5525&파이썬] 문자열을 탐색하는 방법(KMP를 시도했으나 실패..)
# 문제 백준 5525 IOIOI 파이썬 풀이 5525번: IOIOI N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다. P1 IOI P2 IOIOI P3 IOIOIOI PN IOIOI...OI (O가 N개) I와 O로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 PN이 몇 www.acmicpc.net # 코드 ''' - 문제에서는 Pn이 몇개가 존재하는지 찾아야함 - Pn의 정의 -> N+1개의 I와 N개의 0 - KMP 알고리즘을 통해서 찾아보자 ( 문자열 검색을 위한 알고리즘 ) - Brute Force로 찾으면 O(MN)의 시간복잡도를 가진다. - KMP의 접두부, 접미부, 경계부에 대한 이해가 필요함 - 매칭에 실패했을때 얼마큼 점프해야하..
[백준7662&파이썬] 이중 우선순위 큐를 만들고 관리하기(중복값 처리에 대해 항상 생각하자)
# 문제 백준 7662 파이썬 이중 우선순위 큐 풀이 7662번: 이중 우선순위 큐 입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적 www.acmicpc.net # 코드 ''' - 정렬을 이용한 풀이방법은 시간초과 - 정렬 O( k * log N) - 힙을 이용해서 풀고 싶다 - 힙을 두개이용하는 방법 말고 없을까? - nlargeset 풀이방법을 이용 - 중복값이 두번 들어올 수 있다. - 이럴경우 dict을 True / False 로 관리하면 관리 할 수 없게 된다. - 고유 ID값을 주고 그걸 사용하자. ''' import sys from heapq impo..
[백준15651&파이썬] 중복순열을 구하는 두가지 방법
# 문제 백준 15651 N과M 3 파이썬 풀이 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net # 코드 import sys from itertools import product N,M = map(int,sys.stdin.readline().split()) targets = [i for i in range(1,N+1)] # 중복순열의 문제 def dfs(mstr,cnt) : global M if cnt == M+1 : print(mstr) return for target in targets : next = m..
[백준15650&파이썬] 파이썬에서 조합문제 해결하기
# 문제 백준15650 N과M (2) 파이썬 풀이 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net # 코드 import sys from itertools import combinations N,M = map(int,sys.stdin.readline().split()) # 조합의 문제이다. for combi in combinations(range(1,N+1), M) : print(*combi) # 백트래킹으로 풀기 def dfs(arr,index) : if len(arr) == M : print(*arr) re..