본문 바로가기

Algorithms and Languages

(50)
[Python/백준] 7562. 나이트의 이동 문제 접근 및 공부 내용, 풀이는 모두 하단 코드에 "주석"으로 포함되어 있으니 참고해주세요.문제 유형 보기더보기DFS/BFShttps://www.acmicpc.net/problem/7562풀이1차 풀이: 고전적으로 dist정보 큐에 같이 넣기from collections import dequeimport sysinput = sys.stdin.readline# 이거 BFS로 델타 탐색 쓰긴 쓰되, 델타값 정의를 좀 특수하게 하면 될듯함. 2칸 1칸씩.iteration = int(input())for _ in range(iteration): l = int(input()) sx, sy = map(int, input().split()) tx, ty = map(int, input().split(..
[Python] 튜플을 큐(덱)에 넣을 때 할 수 있는 실수 - 원소가 한 개인 튜플. https://www.acmicpc.net/problem/7562 해당 문제를 풀던 중, 다음과 같이 코드를 짜고 있었다. 일반적으로 덱에 튜플을 정의할 때 많이 쓰는 코드 뭉치이다.queue = deque([(sx, sy, 0)])근데, 의문점이 생겼다.  저거 튜플 하나가 메모리에 잡히고, 그 튜플을 감싸는 리스트가 메모리에 잡히게 된 다음에, 그걸 deque에 일종의 append를 하는 과정이 압축되어 있는 건데, 리스트보단 튜플이 아주 미미하지만 오버헤드 때문에 메모리 사용량이 더 크므로(더블링을 위한 정보 등을 저장해야 하니까),그냥 튜플로 튜플을 감싸서 deque에 넣으면 안 될까? 즉, 아래처럼 말이다.queue = deque(((sx, sy, 0)))근데... 이렇게 하면, `sx`, `s..
[Python/백준] 7569. 토마토 3차원 문제 접근 및 공부 내용, 풀이는 모두 하단 코드에 "주석"으로 포함되어 있으니 참고해주세요.문제 유형 보기더보기DFS/BFShttps://www.acmicpc.net/problem/7569풀이유사 3차원 실제는 2차원 풀이from collections import dequeimport sysinput = sys.stdin.readlineM, N, H = map(int, input().split())# 아래 반복문 list comprehension으로 개선하기!!box = []for _ in range(N * H): box.append(list(map(int, input().split())))# 층을 고정한 상태에서, 행을 고정한 상태에서, 열을 기준으로 먼저 돌린다!!queue = deque((i..
[Python] 이미 동적 타입 언어인 파이썬에 제네릭을 사용하는 이유. 제네릭 프로그래밍을 설명할 때 흔히 '타입을 미리 정하지 않고, 사용될 때 그 타입을 결정하는 방식'이라고 설명한다. 하지만, 나는 이게 상당히 C++나 자바틱한 설명이라고 생각한다.왜냐하면, 사실 파이썬은 이미 동적 타입 언어(Dynamically typed language)이기 때문에, 저 설명을 들으면 '사용될 때 정해진단 거, 런타임 때 정해진단 거 아니야? 파이썬은 이미 런타임 때 타입이 결정되는데, 제네릭을 쓰는 의미가 있나? 동적 타이핑은 이미 파이썬에 있는 기능 아닌가?'하는 의문이 들 수 있기 때문이다. 사실 내가 그랬고, 자바에서 제네릭을 간단히 배우긴 했지만 그 때는 코드 따라치기에 급급했지 제대로 이해하진 못했었다.그래서 이번 글로 정리해보려고 한다.우선 제네릭을 이해하기 위해 잠시..
[Python/백준] 7576. 토마토 문제 접근 및 공부 내용, 풀이는 모두 하단 코드에 "주석"으로 포함되어 있으니 참고해주세요.문제 유형 보기더보기DFS/BFShttps://www.acmicpc.net/problem/7576풀이from collections import dequeimport sysinput = sys.stdin.readline# 격자 상태의 상자들과 토마토 정보 주어졌을 때,# 며칠이 지나면 토마토들이 모두 익는지, 그 최소 일수를 구하는 프로그램 작성.# 입력 : 첫 줄에는 상자의 크기 N x M 정수 -> 둘 곱하면 100만 크기# 둘째 줄부터 : 하나의 상자에 저장된 토마토들의 정보# 1: 익은 토마토, 0: 아직 안 익은 토마토, -1: 토마토가 없는 칸(벽)# 1이 0을 전염시키면서 1로 만듦.M, N = map..
[Python] 제네레이터 표현식에서 괄호가 생략 가능한 공식 근거. 안녕하세요? 커피러브입니다. 파이썬의 `제네레이터 표현식(generator expression)`을 사용하다 보면, 다음과 같이 사용하는 경우가 많습니다.a = {1, 2, 3}my_list = list(i for i in a)print(my_list) # [1, 2, 3]그런데... 뭔가 이상하지 않나요? `list(), set()와 같은 형 변환 함수(Type conversion function)`들은 인자로 `이터러블(iterable)`을 받아야 하지 않았던가요? 예를 들어, 아래와 같이 말이죠.b = {1, 2, 3}my_list1 = list(b)my_list2 = list({1, 2, 3})my_list3 = list((1, 2, 3))print(my_list1) # [1, 2, 3]print..
[Python/DailyAlgo] 65. 산불 조심 문제 접근 및 공부 내용, 풀이는 모두 하단 코드에 "주석"으로 포함되어 있으니 참고해주세요.문제 유형 보기더보기DFS/BFShttps://dailyalgo.kr/ko/problems/65풀이처음 푼 풀이(실패)from collections import dequedef solution(mountain): n = len(mountain) counts = 0 # 2. 상하좌우 델타값 정의 dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] def bfs(fires): nonlocal counts queue = deque() for fire in fires: queue.append(fire) ..
[Python/백준] 2667. 단지번호붙이기 문제 접근 및 공부 내용, 풀이는 모두 하단 코드에 "주석"으로 포함되어 있으니 참고해주세요.문제 유형 보기더보기더보기DFS/BFShttps://www.acmicpc.net/problem/2667풀이처음 푼 풀이import sysinput = sys.stdin.readline# 그래프의 연결 요소의 개수를 출력하고# 각 연결 요소에 속한 노드 개수를 오름차순 출력하면 됨.# 입력은 총 단지수와, 단지내 집의 유무 오름차순def dfs(x, y): count = 1 for k in range(4): nx = x + dx[k] ny = y + dy[k] if 0 # 풀이2) dfs를 좀 더 직관적으로 짜 보았음.import sysinput = sys.stdin..