[Algorithm] 분할정복 이론 + 예제
·
🔻Computer Science/Algorithm
❗분할정복이란?문제를 작은 하위 문제로 나누고 각각의 하위 문제를 재귀적으로 해결한 뒤, 그 해답을 결합하여 원래 문제를 해결하는 방법이다. ❗분할정복 기본 원리 분할 (Divide):문제를 더 작은 하위 문제로 나눈다.문제를 동등한 크기의 여러 하위 문제로 분할한다.정복 (Conquer):각 하위 문제를 재귀적으로 해결한다.하위 문제들이 충분히 작아지면 재귀적으로 해결할 수 있으며 이를 기저 조건이라고 한다.기저 조건에서는 하위 문제를 더 이상 분할할 수 없는 상태에 도달한다.합병 (Combine):각각의 하위 문제에서 나온 해답을 합쳐 원래 문제의 해답을 구성한다. ❗예제result = "" # 현재 영역이 모두 같은 숫자로 이루어져 있는지 확인하는 함수def all_same(x, y, size):..
[Baekjoon] 백준 1138 한 줄로 서기 Python
·
🔻PS/Baekjoon
https://www.acmicpc.net/problem/1138 ❗풀이방법line에서 빈자리인지 먼저 확인cnt(지나온 자리 수)와 order(앞에 비워둘 자리 수) 일치하면 line에 배치아니라면 cnt를 하나 늘려줌 ❗코드import sysinput = sys.stdin.readlinen = int(input())arr = list(map(int, input().split(" ")))line = [0 for _ in range(n)]for i, order in enumerate(arr): cnt = 0 for j in range(n): if line[j] == 0: if order ==cnt: line[j] = i+1 ..
[Baekjoon] 백준 2533 랭킹전 대기열 Python
·
🔻PS/Baekjoon
https://www.acmicpc.net/problem/20006 ❗풀이방법이중 for문 사용현재 룸의 레벨에 맞는지와 정원이 다 찼는지 확인하기확인 후 현재 룸에 사람을 넣었다면 flag를 True로 변경현재 사람이 아무데도 들어가지 못했다면 새로운 방 생성각 룸에 누가 있는지 출력 시 닉네임을 기준으로 정렬 후 출력 ❗코드import sysinput = sys.stdin.readlinep, m = map(int, input().split(" "))people = []rooms = []standard = []for _ in range(p): level, nickname = input().rstrip().split(" ") level = int(level) people.append([l..
[Baekjoon] 백준 2533 사회망 서비스(SNS) Python
·
🔻PS/Baekjoon
https://www.acmicpc.net/problem/2533 ❗풀이방법트리 기반 dp로 문제 풀이루트 노드인 정점 1에서 dfs 시작자식 노드부터 값을 계산하여 부모로 거슬러 오는 구조2가지 케이스부모 x, 자식 o부모 o, 자식 x or 자식 o ❗코드import syssys.setrecursionlimit(10**6)input = sys.stdin.readlinen = int(input())graph = [[] for _ in range(n+1)]visited = [0 for _ in range(n+1)]dp = [[0, 0] for _ in range(n+1)]# 얼리어댑터가 아닐 때0, 맞을 때1for _ in range(n-1): a, b = map(int, input().rstrip..
[Baekjoon] 백준 1043 거짓말 Python
·
🔻PS/Baekjoon
https://www.acmicpc.net/problem/1043 ❗풀이 방법파티의 입력 순서에 상관없이 같이 참석했다는 것을 기준으로 그래프 생성알고 있는 사람을 기준으로 dfs 실행해서 비밀을 아는 사람 체크각 파티에서 비밀을 아는 사람이 없어야 결과+1  ❗코드import sysinput = sys.stdin.readlinecnt = 0n, m = map(int, input().split())known = list(map(int, input().split()))[1:]graph = [[] for _ in range(n+1)]visited = [0 for _ in range(n+1)]party = []def dfs(v): visited[v] = 1 for i in graph[v]: ..
[길벗 개발자 리뷰어] 컴퓨터 구조와 운영체제 핵심 노트
·
🔻IT 서적
길벗 개발자 리뷰어에 참여하여 '컴퓨터 구조와 운영체제 핵심 노트'에 대해 리뷰하고자 합니다! ❗책 정보 https://search.shopping.naver.com/book/catalog/47947007621 컴퓨터 구조와 운영체제 핵심 노트 : 네이버 도서네이버 도서 상세정보를 제공합니다.search.shopping.naver.com ❗이 책을 읽어야 하는 이유1️⃣다양한 그림과 단계 설명 자료어떤 공부든 글로 쭉 읽는 것보다 도식화된 자료를 보고 공부하면 더 잘 기억에 남는 것 같습니다! 이 책도 다양한 개념을 그림으로 나타내고 특히 여러 단게를 거치는 그림은 영상이 아니라서 한 번에 이해하기 어려울 수 있는데 이 책은 과정마다 다른 색으로 표시해 주어서 좀 더 이해하기 쉬운 것 같습니다!  2️⃣..
[Database] RDBMS vs NoSQL
·
🔻Computer Science/Database
❗ RDBMS이란?Relational Database Management SystemRDBMS는 관계형 데이터베이스에서 데이터를 관리하고 조작하는 시스템데이터는 테이블(스키마)에 저장되며, 각 테이블은 고정된 컬럼과 데이터 타입을 정의SQL은 RDBMS에서 데이터를 질의하고 처리하는 표준 언어예시: MySQL, PostgreSQL, Oracle, MS SQL Server ✏️특징정형화된 스키마: 데이터를 삽입하기 전에 미리 정의된 스키마(테이블 구조)가 있어야 하며, 데이터는 이 구조를 따라야 함관계: 테이블 간의 관계가 중요하며, 이를 외래 키(Foreign Key)로 연결하여 데이터 무결성을 보장ACID: 데이터베이스 트랜잭션은 원자성(Atomicity), 일관성(Consistency), 고립성(Is..
[Programmers] 프로그래머스 등굣길 Python
·
🔻PS/Programmers
https://school.programmers.co.kr/learn/courses/30/lessons/42898 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr ❗풀이방법고등학교 때 길 찾기 문제랑 똑같이 접근1행과 1열을 dp에서 1로 지정하지만 중간에 그래프에서 0이 나오는 경우, 해당 인덱스부터 끝까지는 dp에서 0으로 처리(이동 불가)상, 좌 dp값을 합쳐서 현재값을 업데이트[행-1][열-1]이 정답 ❗코드def solution(m, n, puddles): graph = [[1 for _ in range(m)] for _ in range(n)] ..
[Baekjoon] 백준 1780 종이의 개수 Python
·
🔻PS/Baekjoon
https://www.acmicpc.net/problem/1780 ❗접근 방법재귀로 범위를 좁히기종료 조건은 정해진 범위 내에 같은 숫자만 있을 경우 → check함수로 분리종료가 되지 않을 경우는 사이즈를 / 3하기새롭게 나뉜 9개의 부분을 for문과 새로운 사이즈를 사용해서 재귀 호출 ❗코드import sysinput = sys.stdin.readlinen = int(input())graph = []for _ in range(n): temp = list(map(int, input().rstrip().split(" "))) graph.append(temp)# -1로만, 0으로만, 1로만result = [0, 0, 0]def check(x, y, n): standard = graph[x]..
[Baekjoon] 백준 1149 RGB거리 Python
·
🔻PS/Baekjoon
https://www.acmicpc.net/problem/1149 import sysinput = sys.stdin.readlinegraph = []n = int(input())for _ in range(n): # 빨강 초록 파랑 -> 각 집을 칠하는 비용 temp = list(map(int, input().rstrip().split(" "))) graph.append(temp)dp = [[0 for _ in range(3)] for _ in range(n)]dp[0] = graph[0]for i in range(1, n): now = graph[i] # i번째에서 R를 칠하려면 이전에는 G, B 중에 작은 것을 칠할 것 dp[i][0] = min(dp[i - 1][1],..
_니지
'분류 전체보기' 카테고리의 글 목록 (2 Page)