전체 글

끄적끄적
코테준비/백준

[백준] 1743번: 음식물 피하기 - Python

링크: https://www.acmicpc.net/problem/1743 아이디어전염되어있는 크기를 구하는거니 bfs를 쓰자N, M 최대값이 각 100 밖에 안돼서 NxM 전체 탐색해도 시간복잡도 그리 안클거 같음NxM 크기의 배열을 각 요소를 0으로 선언해주고 r,c 위치를 다 1로 표시해준다. -> li방문 확인용 배열도 NxM 크기의 각 요소 0인 배열 선언li 리스트를 돌며 1인 (쓰레기위치)를 찾으면 방문했던 위치인지 판단.방문하지 않은 위치라면 bfs 함수 호출size를 1부터 시작해서(자기자신) 주변 탐색을 진행쓰래기 발견시 size+1하는 형식으로 진행bfs 함수는 size 값을 반환result는 초기값 0 을 가지고 bfs 함수 호출 시마다 큰 값을 result에 대입해줌li 탐색이 모두..

코테준비/백준

[백준] 17086번: 바이러스 - Python

링크: https://www.acmicpc.net/problem/2606 아이디어nodes리스트를 통해 카운트한 노드인지 아닌지 판단.bfs를 통해 연결된 노드들 탐색 -> deque() 사용간선을 모두 돌며 탐색하고자 한 값이 간선의 양 끝값중 같은게 있는지 판단같은게 있다면 그와 연결된 노드가 이미 탐색이 완료된 친구인지 판단탐색 전인 노드라면 q에 넣고 nodes 리스트에 탐색 표시 0->1모두 완료 후 nodes리스트의 총 합 -1 출력 ( 1번 노드는 빼야함)구현import sysfrom collections import dequeinput = sys.stdin.readlinenode_cnt = int(input())line_cnt = int(input())lines = [list(map(int..

Python

[파이썬] *args와 **kwargs

서론FastAPI를 공부하면서 데코레이터에 대한 이해가 필수적이라는 것을 알게 되었다. 파이썬을 다루면서 종종 접했던 *args와 **kwargs도 이에 깊이 관련되어 있다. 그동안 이 부분을 대충 넘어가곤 했지만, 이번 기회에 확실히 정리해보려 한다.처음 args와 **kwargs를 접했을 때, 나는 C언어의 포인터와 이중 포인터를 떠올렸다. C언어를 처음 배울 때 포인터는 어느 정도 이해했지만, 이중 포인터는 다소 복잡하게 느껴졌던 기억이 난다. 이러한 이유로 args와 **kwargs에 대해서도 자세히 알아보는 것을 피했던 것 같다.이번 포스팅에서는 *args와 **kwargs의 개념과 사용법을 명확히 정리하여, 앞으로의 개발에 있어 도움이 됐음 좋겠다.*args와 **kwargs의 개념*args ..

박치기 공룡

React에서 전역 상태 관리

React에서 상태 관리 라이브러리란?정의: 애플리케이션의 여러 컴포넌트들이 공유하는 데이터를 저장하고 관리할 수 있도록 도와주는 도구.쉽게 말해, 애플리케이션 전반에서 공유해야 하는 중요한 정보를 한 곳에 모아놓고, 각 컴포넌트가 이 정보를 편리하게 불러오고 수정할 수 있도록 하는 일종의 "중앙 창고" 같은 역할을 한다.상태 관리 라이브러리를 사용하는 이유복잡한 컴포넌트 구조에서의 상태 전달 문제 해결 (props drilling)React는 컴포넌트 트리 구조로 이루어져 있어, 자식 컴포넌트에 데이터를 전달하려면 props를 통해 상위에서 하위로 상태를 내려주어야 한다. 하지만 트리가 깊어질수록 props를 계속해서 전달해야 하므로 코드가 복잡해지고 관리하기 어려워지는 문제점이 있다. 이 문제를 상태..

박치기 공룡

CSR, SSR, SSG 뭐가 다르냐~~?

개요웹페이지 렌더링 방식은 웹 애플리케이션의 속도와 효율성을 높여 사용자 경험(UX)을 개선하기 위해 발전해 왔다.대표적으로 CSR(Client-Side Rendering), SSR(Server-Side Rendering), SSG(Static Site Generation) 세 가지 렌더링 방식이 등장했고 각 방식은 사용자에게 페이지를 제공하는 과정에서의 차이점을 가지고 있으며, 각각의 장단점이 있다. 이러한 차이점과 각 방식의 특징을 자세히 알아보도록 하자.렌더링 방식의 변화 과거의 웹 애플리케이션은 정적 렌더링 방식을 사용하여, URL에 요청이 오면 해당하는 정적 HTML 파일을 전달하는 형식이였다. 이런 방식은 페이지를 단순하게 제공하는 데에 적합하지만, 페이지 내부의 콘텐츠를 동적으로 변경하거나 ..

박치기 공룡

RDBMS의 한계와 NoSQL을 사용하는 이유

RDBMS란?Relational Database Management System로 데이터를 테이블이라는 구조로 관리하는 데이터베이스 시스템.테이블은 행(Row)과 열(Column)로 구성되며, 데이터는 고정된 스키마(Schema)에 따라 저장된다. 대표적인 RDBMS로는 MySQL, PostgreSQL, OracleDB 등이 있습니다.RDBMS의 주요 개념스키마: 데이터를 저장하기 위한 구조를 정의. 테이블의 컬럼 이름, 데이터 타입, 제약 조건 등이 포함됨.ACID 속성: 트랜잭션의 안정성을 보장하는 원칙.Atomicity(원자성): 모든 작업이 성공하거나 모두 실패함.Consistency(일관성): 트랜잭션 전후에 데이터 무결성 유지.Isolation(격리성): 트랜잭션 간 간섭을 최소화.Durabi..

코테준비/백준

[백준] 17086번: 아기 상어 2 - Python

링크: https://www.acmicpc.net/problem/17086 아이디어상어의 위치를 기준으로 bfs를 하자1번상어와 2번상어의 거리와 2번 상어와 1번 상어의 거리는 같으니 반복해서 탐색 할 필요가 없음li값이 0이 아닌 부분만 탐색한번 탐색한 li[y][x] 값을 이전 값의 +1 한 값을 넣어 거리와 탐색 했다 안했다를 동시에 지정bfs 탐색이 모두 끝난 후 li의 최대 값의 -1 한값 출력첫 시작을 1부터 했으니 -1을 해줘야 함 구현import sysfrom collections import deque input = sys.stdin.readlineN, M = map(int, input().split())li = [list(map(int, input().strip().split())) ..

코테준비/백준

[백준] 21610번: 마법사 상어와 비바라기 - Python

링크: https://www.acmicpc.net/problem/21610아이디어N의 값이 그렇게 크지 않아서 반복문을 많이 써도 괜찮을 것 같다.구름의 좌표가 리스트 인덱스 표기보다 1 커서 -1을 미리 해주고 사용하면 편할듯구름이동과 대각선 확인은 따로 리스트를 만들어서 관리하면 좋겠다.구름 생성시 이전의 구름 위치는 생성하면 안된다. -> 튜플을 사용해서 시간 복잡도를 낮추면 좋겠다.구현# (N, 1), (N, 2), (N-1, 1), (N-1, 2)에 비구름이 생긴다.# d 방향으로 s칸 이동# 1부터 순서대로 ←, ↖, ↑, ↗, →, ↘, ↓, ↙import sysinput = sys.stdin.readlineN, M = map(int, input().split())li = [list(map..

코테준비/백준

[백준] 1966번: 프린터 큐 - Python

링크: https://www.acmicpc.net/problem/1966 아이디어전체 테스트 케이스와 테스트 케이스 별 처리 과정 2중 반복문으로 O(N^2) 시간 복잡도를 가진다.deque 라이브러리를 활용해 큐 자료구조 다루자반복마다 pop 이벤트가 나오면 cnt 값을 증가시키자반복마다 M값을 변경하여 원하는 값의 위치를 최신화 하자반복마다 맨 앞의 값이 큐의 최대값인지 아닌지로 분기를 나눈다.맨 앞의 값이 최대값인 경우 (우선순위가 가장 높은 경우)M이 0 이면 cnt 값을 출력하고 반복문을 끝내 다음 테스트 케이스로 넘어간다아니면 M의 값을 1 감소, 맨 앞의 값 popleft()로 뺌, cnt 1증가맨 앞의 값이 최대값이 아닌 경우 (우선순위가 가장 높지 않은 경우)M이 0이면 맨 뒤에 붙여줘..

예찬예찬
예찬예찬