썸네일 정보처리기사 1과목 소프트웨어 설계 1. 소프트웨어 생명주기 1-1. 소프트웨어 공학의 기본원칙 현대적인 프로그래밍 기술 계속적 적용 개발된 소프트웨어 품질 유지를 위한 지속적 검증 소프트웨어 개발 관련 사항 및 결과에 대한 명확한 기록 유지 1-2. 폭포수 모형(Waterfall Model) 각 단계를 확실히 매듭짓고 결과를 철저하게 검토하여 승인 과정을 거친 후 다음 단계를 진행하는 개발 방법론 가장 오래되고 폭넓게 사용된 전통적 소프트웨어 생명주기 모형 - 고전적 생명주기 모형 한 단계가 끝나야만 다음 단계로 넘어갈 수 있는 선형 순차적 모형 1-3. 프로토타입 모형(Prototype Model, 원형 모형) 사용자의 요구사항을 정확히 파악하기 위해 실제 개발될 소프트웨어의 시제품을 만들어 최종 결과물을 예측하는 모형 시제품은 사용자..
썸네일 (알고리즘) 이진 탐색 1. 이진 탐색 (Binary Search) 이란? 탐색할 자료를 둘로 나누어 해당 데이터가 있을만한 곳을 탐색하는 방법 데이터가 정렬이 되어 있다는 전제 하에 사용 가능 다음 문제를 먼저 생각해보자 이진 탐색의 이해 (순차 탐색과 비교하며 이해하기) 2. 분할 정복 알고리즘과 이진 탐색 분할 정복 알고리즘 (Divide and Conquer) Divide: 문제를 하나 또는 둘 이상으로 나눈다. Conquer: 나눠진 문제가 충분히 작고, 해결이 가능하다면 해결하고, 그렇지 않다면 다시 나눈다. 이진 탐색 Divide: 리스트를 두 개의 서브 리스트로 나눈다. Comquer 검색할 숫자 (search) > 중간값 이면, 뒷 부분의 서브 리스트에서 검색할 숫자를 찾는다. 검색할 숫자 (search) < ..
썸네일 (알고리즘) 재귀용법 1. 재귀 용법 (recursive call, 재귀 호출) 함수 안에서 동일한 함수를 호출하는 형태 여러 알고리즘 작성시 사용되므로, 익숙해져야 함 2. 재귀 용법 이해 예제를 풀어보며, 재귀 용법을 이해해보기 예제 팩토리얼을 구하는 알고리즘을 Recursive Call 을 활용해서 알고리즘 작성하기 예제 - 분석하기 간단한 경우부터 생각해보기 2! = 1 X 2 3! = 1 X 2 X 3 4! = 1 X 2 X 3 X 4 = 4 X 3! 규칙이 보임: n! = n X (n - 1)! 함수를 하나 만든다. 함수(n) 은 n > 1 이면 return n X 함수(n - 1) 함수(n) 은 n = 1 이면 return n 검증 (코드로 검증하지 않고, 직접 간단한 경우부터 대입해서 검증해야 함) 먼저 2! ..
썸네일 [백준] 18111번 : 마인크래프트 (브루트포스 알고리즘)- 파이썬[Python] 문제 18111번: 마인크래프트 팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게 www.acmicpc.net 풀이 import sys N,M,B = map(int,sys.stdin.readline().split()) list1=[] solve=[] for i in range(N): list1+=(map(int,sys.stdin.readline().split())) for i in range(min(list1),max(list1)+1): bag=B sec=0 for ground in list1: if (ground-i)>0: #1번작업 bag+=(ground-i) ..
썸네일 [백준] 13305번 : 주유소(탐욕 알고리즘)- 파이썬[Python] 문제 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 풀이 import sys N=int(sys.stdin.readline()) distance=list(map(int,sys.stdin.readline().split())) oil=list(map(int,sys.stdin.readline().split())) solve=0 best_oil=oil.index(min(oil)) #첫번째 solve+=oil[0]*distance[0] for i in range(1,len(oil)-1): if oil[i]..
썸네일 [백준] 1541번 : 잃어버린 괄호(탐욕 알고리즘)- 파이썬[Python] 문제 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 풀이 n=input().split('-') list1=[] for i in range(len(n)): n2=list(map(int,n[i].split('+'))) list1.append(sum(n2)) solve=list1[0] for i in range(1,len(list1)): solve-=list1[i] print(solve) 문자열 파싱하는 것이 중요한 문제이다. 우선 split('-')으로 문자열을 자르고 리스트를 확인하면, 어떤 식으로 풀어..
썸네일 파이썬 - 정규표현식 정규 표현식 메타문자 메타 문자 사용예 설명 [ ] 문자 클래스 [abc] a, b, c 중 한 개의 문자와 매치 [s-e] [0-2] [a-c] [a-zA-Z] [0-9] 0,1,2 a,b,c 알파벳모두 숫자 ^ 반대 [^0-9] 숫자가 아닌 문자와 매치 ? 0또는1글자 (있어도 되고 없어도 되고) ab?c ?앞에 문자 b를 0 또는 1번 반복 O abc O ac X abbc . 1글자 a.b a[.]b a + 모든문자 + b a + Dot(.)문자 + b * 반복 0~ ca*t *앞에 문자 a를 0~ 반복 O ct O cat O caaat + 반복 1~ ca+t +앞에 문자 a를 1~ 반복 X ct O cat O caaat {s,e} 반복 s~e {3,5} {3, } { ,5} {1, } {0, } ..
썸네일 [백준] 1931번 : 회의실배정(탐욕 알고리즘)- 파이썬[Python] 문제 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 풀이 import sys N=int(sys.stdin.readline()) N_list=[] #회의실 시간 리스트 S_list=[] #가능한 회의 추가하는 리스트 for i in range(N): N_list.append(list(map(int,sys.stdin.readline().split()))) N_list=sorted(N_list, key= lambda x: (x[1],x[0],x[1]-x[0])) #끝나는 시간, 시작 시간, 걸리는 시간 순으로 정렬 for i in range(len(N_list)): if len(S_list)==0: #첫 회의일 경우 S_list..
썸네일 [백준] 11399번 : ATM(탐욕 알고리즘)- 파이썬[Python] 문제 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 풀이 import sys N=int(sys.stdin.readline()) N_list=list(map(int,sys.stdin.readline().split())) N_list.sort() #오름차순 정렬 nn=0 #누적 계산용 solve=0 #답 출력용 for i in N_list: nn+=i solve+=nn print(solve) 탐욕 알고리즘을 활용한 문제이다. 시간이 덜 걸리는 순서대로 줄을 세워야 필요한 시간이 최소값이 된다. 줄을 서는 순서에 따라 걸리는 시간을 오름차순으로..
썸네일 (알고리즘) 탐욕 알고리즘(Greedy Algorithm) 탐욕 알고리즘의 이해 1. 탐욕 알고리즘 이란? Greedy algorithm 또는 탐욕 알고리즘 이라고 불리움 최적의 해에 가까운 값을 구하기 위해 사용됨 여러 경우 중 하나를 결정해야할 때마다, 매순간 최적이라고 생각되는 경우를 선택하는 방식으로 진행해서, 최종적인 값을 구하는 방식 2. 탐욕 알고리즘 예 문제1: 동전 문제 지불해야 하는 값이 4720원 일 때 1원 50원 100원, 500원 동전으로 동전의 수가 가장 적게 지불하시오. 가장 큰 동전부터 최대한 지불해야 하는 값을 채우는 방식으로 구현 가능 탐욕 알고리즘으로 매순간 최적이라고 생각되는 경우를 선택하면 됨 coin_list = [500, 100, 50, 1] def min_coin_count(value, coin_list): total..