전체 글 181

소프트웨어 마에스트로란? (소마 지원 규모, 목적)

최우수 SW 인재를 발굴해 체계적, 파격적 지원을 통해 SW 산업에 발전을 기여하겠다는 목적으로 기획된 정부 지원 사업이다. IT 관련 프로그램 중 가장 유명하고 인기가 많은 프로그램 중 하나이고 그만큼 경쟁률도 치열하다. (평균 10:1 ~ 8:1 정도) 국내 IT 대외활동 중 최고 수준의 지원을 받는데, 지원 내용은 아래와 같다. 소프트웨어 마에스트로 지원 규모 IT기기: 노트북 등 IT 기기 구입비 최대 200만원 지원 지원금: 프로젝트 개발 기간(6개월) 월 100만원 지원금 지급 개발비: 프로젝트 개발 기간(6개월) 720만원 개발비(1인 240만원) 지원 프로젝트 개발비: 팀별 프로젝트 재료비, 기술정보수집비 등 지원 멘토링: SW개발, 법률, 컨설팅 등 최고전문가(멘토단)의 멘토링 제공 글로..

디자인 패턴이란? (Software Design Pattern)

디자인 패턴이란? - 과거 소프트웨어 개발 과정에서 발견한 설계 노하우를 패턴으로 정리한 것을 말한다. 장점 1. 코드 스타일이 비슷해진다 -> 의사소통을 효율적으로 할 수 있다. 2. 이미 검증된 구조이므로 설계를 빠르게 할 수 있다. 디자인 패턴은 목적에 따라 크게 세 가지로 나뉜다. 1. 생성 패턴 2. 구조 패턴 3. 행동 패턴 이 중 생성 패턴에서는 싱글턴, 팩토리 메서드, 구조 패턴에서는 어댑터, 행위 패턴에스는 템플릿 메서드를 알아보겠다. 1. 싱글톤 패턴 (생성 패턴) - 인스턴스를 오직 1개만 생성하는 패턴 A, B, C라는 클래스가 있다고 하자. 이때 A, B, C 클래스에서 각각 D라는 클래스가 필요해 가져다 쓴다면 메모리에 같은 객체가 3개 생기게 된다. 만약 각각이 다른 정보, 다..

Base/용어 개념 2022.03.26

[Python/파이썬] 백준 알고리즘 1753번 - 최단경로 (다익스트라/Dijkstra)

""" 1. 아이디어 - 한점 시작, 모든 거리 : 다익스트라 - 간선, 인접리스트 저장 - 거리배열 무한대 초기화 - 시작점 : 거리배열 0, heap에 넣어주기 - 힙에서 빼면서 다음의 것들 수행 - 최신값인지 먼저 확인 - 간선을 타고 간 비용이 더 작으면 갱신 2. 시간복잡도 - 다익스트라 : O(ElgV) - E : 3e5 (문제에서 1

[Python/파이썬] 백준 알고리즘 10844 - 쉬운 계단 수 (DP)

처음에는 백트래킹으로 풀 생각을 했다.. import sys sys.setrecursionlimit(10 ** 6) input = sys.stdin.readline N = int(input()) cnt = 0 def backTracking(depth): if depth == N: global cnt cnt += 1 return elif num[-1] == 0: num.append(1) backTracking(depth + 1) num.pop() elif num[-1] == 9: num.append(8) backTracking(depth + 1) num.pop() else: for i in (num[-1] - 1, num[-1] + 1): num.append(i) backTracking(depth + 1)..

[Python/파이썬] 단어 변환 (BFS) (프로그래머스 코딩테스트 고득점 Kit)

from collections import deque def solution(begin, target, words): answer = 0 wordsNum = len(words) visited = [0 for _ in range(wordsNum)] queue = deque() queue.append(begin) while queue: popWord = queue.popleft() if popWord == target: answer = visited[words.index(target)] break for i in range(wordsNum): if visited[i] == 0: # 아직 방문하지 않은 단어만 방문함 check = 0 for j in range(len(popWord)): if popWord[j..

[Python/파이썬] 백준 알고리즘 13913 - 숨바꼭질 4 (BFS)

경로를 표현해야해서 처음에는 DFS로 탐색해야하나..? 생각했다 하지만 BFS로도 충분히 해결할 수 있었다. 경로에 대한 배열을 따로 만들어 최단경로에 대한 값을 저장하며 해결하는 것이다. # 아래는 따로 path 배열을 안만들고 파라매터로 받아 처리한건데 시간초과 나온다... # 왜 시간초과가 나올까..? import sys from collections import deque input = sys.stdin.readline N, K = map(int, input().split()) road = [0] * 100001 queue = deque() queue.append([N]) road[N] = 1 while queue: pathList = queue.popleft() popN = pathList[-1..

[Python/파이썬] 백준 알고리즘 13549 - 숨바꼭질 3 (BFS)

기존 숨바꼭질 문제에서는 모든 가중치가 1이었다. 이 문제의 차이점은 순간이동하는 경우는 0으로 가중치가 다르다는 것이다. 순간이동은 0초가 걸리고 걷기는 1초가 걸리므로 큐를 2개로 나눠 구현하면 된다. 이때 양방향 큐인 deque를 활용하면 별도의 큐를 더 생성하지 않고 구현할 수 있다. 순간이동하는 경우는 appendleft로 맨앞에 추가해주고 걷는 경우는 append로 뒤에 추가해주면 된다. import sys from collections import deque input = sys.stdin.readline N, K = map(int, input().split()) road = [0] * 100001 queue = deque() queue.append(N) road[N] = 1 while qu..

[Python/파이썬] 백준 알고리즘 12851 - 숨바꼭질 2 (BFS)

""" 1. 아이디어 가장 빠른 시간을 출력하고 '방법의 가짓수'도 출력해야하므로 dfs로 탐색해야한다. 최대 수는 동생 위치에서 수빈이의 위치를 뺀 값이고 해당 값에 도달하면 탐색을 마쳐야한다. (그때까지 찾아도 못찾았다는건 최단거리 탐색에 실패한 트리가지인거니까) dfs로 탐색했을 때 동생이 있는 점 K에 도달할 때 도달하는데 걸린 횟수를 저장한다. 그리고 다음에 또 도달하면 둘을 비교해 더 큰 값을 저장한다. 만약 같다면 같은 도달 시간 횟수를 체크한다. bfs로 탐색한다. visited 배열에 걸린 시간을 체크해서 적어두는데 이미 시간이 적힌 배열칸에 다시 접근하기 위해서 or 연산자를 이용해 visited[nextX] == visited[popX] + 1 를 추가한다. 2. 시간복잡도 - 3. ..

[Python/파이썬] 백준 알고리즘 3085 - 사탕 게임 (Brute Force)

""" 1. 아이디어 브루트포스로 다 돌려본다. N이 최대 50이므로 가능하다. 한 위치에서 상하좌우와 바꿀 수 있지만 겹치므로 아래와 오른쪽만 계속해서 바꿔주면 된다. 바꿔준 뒤, 전체 보드에서 먹을 수 있는 사탕의 최대 개수를 구한 뒤 다시 원상복구 해주고 다음 걸로 넘어가 바꿔주고 확인하고를 반복하면 된다. 2. 시간복잡도 - O(N^4) : 50 ** 4 = 6250000 가능 3. 자료구조 N: int; board: str[][]; maxCnt: int; """ import sys input = sys.stdin.readline N = int(input()) board = [list(input()) for _ in range(N)] maxCnt = 0 def check(): glo..

[Python/파이썬] 백준 알고리즘 14888 - 연산자 끼워넣기 (BackTracking)

""" 1. 아이디어 연산자들 숫자만큼 리스트로 연산자를 담고 백트래킹으로 순회한다. 그리고 각각의 결과값을 구해 비교하여 최댓값과 최솟값을 구한다. 2. 시간복잡도 - O(N^2) : 100 * 100 가능 3. 자료구조 N: int; A: int[]; operator: str[]; canUsedCnt: int[]; maxValue, minValue: int; """ import sys sys.setrecursionlimit(10 ** 4) input = sys.stdin.readline N = int(input()) A = list(map(int, input().split())) canUsedCnt = list(map(int, input().split())) operatorList = ..

반응형