목록2025/12 (43)
cmod.ify
import sysfrom collections import dequeinput = sys.stdin.readline# 입력n, m = map(int, input().split())# 초기화friends = [[] for i in range(n+1)]Min = sys.maxsizeanswer = 0# 관계 입력 for i in range(m): a, b = map(int, input().strip().split()) # 양방향 friends[a].append(b) friends[b].append(a)# 정렬for f in friends: f.sort()def bfs(i,j): # i = 나, 0 = 거리 q = deque([(i, 0)]) visited..
ORM (Object Relational Mapping)객체 지향 프로그래밍의 '객체(Class)'와 관계형 데이터베이스의 '테이블(Table)'을 자동으로 연결해 주는 기술입니다.(1) 장점과 단점장점:DB 독립성: 코드를 수정하지 않고도 MySQL에서 Oracle이나 PostgreSQL로 쉽게 교체 가능합니다.객체 지향적: SQL 문장이 아닌 파이썬 코드로 데이터를 다루므로 생산성이 높습니다.유지보수: 테이블 구조가 바뀌어도 클래스만 수정하면 되어 관리가 편합니다.단점:성능 이슈: 매우 복잡한 통계 쿼리 등은 직접 SQL을 쓰는 것보다 느릴 수 있습니다.학습 곡선: SQL 외에 ORM 자체의 문법을 배워야 합니다.9. SQLAlchemy 실습 정리파이썬에서 가장 강력하고 널리 쓰이는 ORM 라이브러리..
1. 데이터베이스 접속 준비물프로그래밍 언어(Python)가 DB에 접속하려면 다음의 5가지 정보가 반드시 필요함.Host: 서버 위치 (내 컴퓨터라면 localhost 또는 127.0.0.1)Port: MariaDB 기본값은 3306Database: 접속할 DB 이름 (예: hapi)User/PW: 접속 계정 및 비밀번호Driver: 인터페이스 역할을 하는 라이브러리 (파이썬용: pymysql)2. 환경 설정 및 드라이버 설치터미널(또는 CMD)에서 아래 명령어로 라이브러리를 설치함.pip install pymysql3. 데이터베이스 접속 및 해제안전한 연동을 위해 try-except-finally 구문을 사용하는 것이 정석임.import pymysqlcon = Nonetry: con = pymy..
1. 트리거 (TRIGGER): "자동 실행기"특정 테이블에 이벤트(INSERT, UPDATE, DELETE)가 발생하면 자동으로 실행되는 개체임.주요 용도:유효성 검사: 데이터가 삽입/수정될 때 올바른 값인지 확인.로그/감사(Logging/Audit): 데이터가 언제, 누구에 의해 바뀌었는지 기록 보관.주의사항: 트리거 내에서는 트랜잭션 제어 문장(COMMIT, ROLLBACK)을 사용할 수 없음.기본 문법:CREATE TRIGGER 트리거이름{BEFORE | AFTER} {INSERT | UPDATE | DELETE} -- 실행 시점과 사건ON 테이블이름FOR EACH ROW -- 행마다 실행BEGIN -- 실행할 SQL 문장END;2. 인덱스 (INDEX): "빠른 검색을 위한 색인"데이터 조..
가상의 테이블: VIEW, CTE, 임시 테이블1. 인라인 뷰 (Inline View)정의: FROM 절 안에 직접 작성된 서브쿼리임.특징: 쿼리가 실행되는 동안만 잠깐 메모리에 생성되었다가 사라지는 임시 테이블임.사용 예: 복잡한 필터링을 미리 해두고, 그 결과에서 다시 조회하고 싶을 때 사용함.SELECT * FROM (SELECT * FROM tCity) A; -- 'A'라는 별명을 붙여 인스턴스처럼 사용2. 뷰 (VIEW)정의: SELECT 구문 자체를 데이터베이스에 저장해두고, 마치 테이블처럼 부르는 가상 테이블임.장점:속도: 주기억장치(메모리)에 저장되어 실행 속도가 빠름.보안: 사용자에게 실제 테이블의 모든 컬럼을 보여주지 않고 필요한 것만 보여줌.편의성: 쿼리가 길어지는 것을 방지함.주의:..
많이 취약했던 문제인 것 같다 과일을 왼쪽에서 부터 일단 뺀다(pop)그리고 뺀 과일 종류의 개수를 센다(fruit)현재 과일 종류를 몇개 가지고 있는지 센다 (cur_f)두 종류가 넘으면 왼쪽에서부터 뺀다(종류 개수도 빼야 함)위 과정을 진행하면서 제일 많이 가지고 있던 과일의 수를 기억한다(answer) import sysfrom collections import dequeinput = sys.stdin.readlinen = int(input())tanghuru = list(map(int, input().strip().split()))q = deque()fruit = [0 for _ in range(10)]cur_f = 0answer = 0for f in tanghuru: q.append(f)..
문제 이해 1이면 가고 2면 출발 0이면 벽임 못 도달 하는 곳은 -1로 출력 해야함 그럼 모든 곳을 -1로 초기화하고 나머지는 거리를 이전거리에서 하나씩 더하면 될 것 같음 출력 예시 보니까 bfs인 것 같음. 입력값보니까 dfs하면 어차피 시간초과임 ======================================== 코드 계획 입력 받기 N, M 저장 N 번 반복하면서 입력 받는데 2부터 탐색 해야 하니까 저장(x,y) 네방향 이동할 dx, dy 리스트 생성 -1로 초기화한 answer 배열 생성 방문 여부 visited 배열은 False로 초기화 큐에 2의 x,y좌표 저장 방문처리 answer 처음위치 0으로 정하기 q가 비어있지 않을 동안 반복 curx, cury에 q pop해서 저장 네 ..
1. DML (Data Manipulation Language, 데이터 조작어)데이터베이스의 테이블에 들어있는 실제 데이터(행)를 관리하는 언어임.개발자가 가장 많이 사용하는 명령어들이 여기에 다 있음.SELECT: 데이터를 조회할 때 사용 (JOIN, 서브쿼리, 집합 연산자가 모두 여기에 해당함).INSERT: 새로운 데이터를 테이블에 삽입할 때 사용.INSERT IGNORE INTO DEPT02 VALUES(10, '영업부', '서울');INSERT IGNORE INTO DEPT02 VALUES(20, '총무부', '부산어쩌구저쩌구길이짱길다아아');INSERT IGNORE INTO DEPT02 VALUES(30, '인사부', '경기');-- IGNORE을 사용하면 타입을 무시하고 삽입 가능하지만 짤려..
🔗 SQL 집합 연산자 (SET OPERATOR) 정리1. 개요2개 이상의 SELECT 문 결과를 하나로 합치는 연산임.조인(JOIN)이 옆으로(열) 합치는 거라면, 집합 연산자는 위아래로(행) 합치는 것임.2. 사용 가이드라인열의 개수와 자료형 일치: 첫 번째와 두 번째 SELECT 문의 컬럼 개수와 데이터 타입이 순서대로 맞아야 함.컬럼 이름: 결과창에 뜨는 컬럼 명은 첫 번째 SELECT 문의 것을 따름.정렬: ORDER BY는 맨 마지막 문장에 딱 한 번만 쓸 수 있음.제한: LOB 계열(BLOB, CLOB)이나 LONG 형 컬럼에는 사용 불가함.3. 집합 연산자의 종류① UNION (합집합 - 중복 제거)두 결과물을 합친 후 중복된 행은 하나만 남김.내부적으로 정렬 과정을 거치므로 데이터가 많..
bfs, dfs, 네방향 탐색 모두 c++로만 해보고 파이썬으론 처음 해봤다기억도 가물가물해서 1260을 먼저 풀고 왔다근데 네방향은 또 새로운 느낌 ㅎㅎ; dfs 로 풀었는데 생각해보니까 시간초과가 날 수 밖에 없는..경로를 구하는 문제가 아니라면 bfs로 무조건 생각해야지 c++에선 queue 쓰는게 쉬웠는데 여긴 좀 헷갈린다import collections from deque# 삽입 시 []로 묶어줘야 한다q = deque([data])# 앞에 데이터를 뽑을 시q.popleft() 문제 풀 때 헷갈렸던 점1. 입력 받을 때 strip() 처리2. 방문 처리 : 맵 안쪽인지 확인하고 visited로 방문했는지 확인 만약 x가 아니라면(o와 p는 방문 가능하다) 방문처리하기 q에 위치 저장하기..