[실버 3] 백준 6666 - Help Me with the Game (파이썬)
[실버 3] 백준 6666 - Help Me with the Game (파이썬)
2025.07.31분류 : 구현링크 : https://www.acmicpc.net/problem/6666풀이문제집에서 이거 안풀면 꿈에서 나온다는 말이 있어서 찾아보게된 문제이며, 문제 번호부터가 6666으로 예사롭지가 않다.근데 진짜 문제도 예사롭지 않다.입력을 한번 봐보자+---+---+---+---+---+---+---+---+|.r.|:::|.b.|:q:|.k.|:::|.n.|:r:|+---+---+---+---+---+---+---+---+|:p:|.p.|:p:|.p.|:p:|.p.|:::|.p.|+---+---+---+---+---+---+---+---+|...|:::|.n.|:::|...|:::|...|:p:|+---+---+---+---+---+---+---+---+|:::|...|:::|...|:::|....
[골드 4] 백준 2661 - 좋은수열 (파이썬)
[골드 4] 백준 2661 - 좋은수열 (파이썬)
2025.07.30분류 : 백트래킹링크 : https://www.acmicpc.net/problem/2661풀이이 문제는 숫자 1, 2, 3 으로만 이루어지는 수열이 있으며, 임의의 길이의 인접한 두 개의 부분 수열이 동일한 것이 있으면, 그 수열은 나쁜 수열이라고 한다.좋은 수열은 인접한 두 개의 부분 수열이 동일하면 안된다. 즉 1212는 마지막 두자리 12가 반복되므로 나쁜 수열이다.길이 N의 좋은 수열 중 사전순으로 가장 앞서는 수열을 찾아야한다.def is_good(seq) : length = len(seq) for i in range(1, length // 2 + 1) : if seq[-i:] == seq[-2 * i : -i] : return False retu..
[yolo11] 🚗 YOLO를 활용한 차량 분류 시스템 개발기 (2) - Yolo를 통해 객체 인식하기
[yolo11] 🚗 YOLO를 활용한 차량 분류 시스템 개발기 (2) - Yolo를 통해 객체 인식하기
2025.07.29https://blog.system32.kr/567 [yolo11] 🚗 YOLO를 활용한 차량 분류 시스템 개발기 (1) - YOLO란 무엇인가? + labelme 사용법블랙박스 영상에는 단순히 사고 장면을 담는 것 이상의 수많은 정보가 들어 있다. 차량의 움직임, 주변 상호, 도로 표시, 다른 차량 정보까지 — 이것들은 모두 범죄 수사, 보험 분쟁, 운전 패턴blog.system32.kr기존글에서는 YOLO를 활용한 차량 분류 시스템 개발 - YOLO가 무엇인지, 그리고 Labelme를 사용해서 Yolo에 적합한 타임의 Dataset으로 변환하는 과정에 관해서 작성했었다.본 게시물에서는 [yolo11] 🚗 YOLO를 활용한 차량 분류 시스템 개발기 (1) - YOLO란 무엇인가? + labelme ..
[실버 2] 백준 11279 - 최대 힙 (파이썬)
[실버 2] 백준 11279 - 최대 힙 (파이썬)
2025.07.29분류 : 자료구조링크 : https://www.acmicpc.net/problem/11279풀이백준 1927과 비슷한 문제이다. 1927 최소 힙 문제에서는 정석대로 heap에 값을 양수로 넣었지만, 이번 문제는 최대 힙을 구하는 문제이기에, -를 붙여서 음수로 넣어주면 힙에서는 최대 힙으로 정렬되게 된다.이때 문제점은 pop 할때도 음수로 나오기에, 다시한번 -를 붙여주면, 최대 힙으로 출력 할 수 있다.코드# 백준 11729 - 최대 힙import heapqimport sysinput = sys.stdin.readlineN = int(input())heap = []for i in range(N) : x = int(input()) if x == 0 : if len(heap) > ..
[실버 2] 백준 1927 - 최소 힙 (파이썬)
[실버 2] 백준 1927 - 최소 힙 (파이썬)
2025.07.29분류 : 자료구조링크 : https://www.acmicpc.net/problem/1927풀이힙의 기초적인 문제이다. 사실 시간초과가 나긴했는데, sys.stdin.readline을 고려하지 못했다.문제에서는 N이 최대 10만개이기 때문에 단순히 input()으로만으로는 당연히 시간 초과가 날 수 밖에 없다.문제에서 N을 입력받고, 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 X가 주어진다고 한다.X가 0이 아닌 경우에는 배열에 자연수 X를 넣고, 0이라면 배열에서 가장 작은 값을 출력하고, 그 값을 배열에서 제거하면 된다.이에 적합한 자료구조는 heap이기에 아래와 같은 코드로 작성하였다.코드# 백준 1927 - 최소 힙import heapqimport sysinput = sys.stdin.r..
[yolo11] 🚗 YOLO를 활용한 차량 분류 시스템 개발기 (1) - YOLO란 무엇인가? + labelme 사용법
[yolo11] 🚗 YOLO를 활용한 차량 분류 시스템 개발기 (1) - YOLO란 무엇인가? + labelme 사용법
2025.07.26블랙박스 영상에는 단순히 사고 장면을 담는 것 이상의 수많은 정보가 들어 있다. 차량의 움직임, 주변 상호, 도로 표시, 다른 차량 정보까지 — 이것들은 모두 범죄 수사, 보험 분쟁, 운전 패턴 분석 등 다양한 분야에서 활용될 수 있다.이번 프로젝트에서는 이러한 영상 정보들을 좀 더 정형화된 데이터로 추출하여 분석하기 위해 여러 기능들을 구현하려고 한다.그중 첫 번째는 가장 기본적이면서도 강력한 기능, 바로 차량 분류 시스템이다. 🔍 차량 분류 시스템이란?예를 들어, 내가 주차 중 누군가의 차량에 의해 긁히는 뺑소니를 당했는데, 블랙박스 영상에는 차량의 외형만 찍혔다고 가정해본다.이럴 경우, 차량 종류(승용차, SUV, 트럭 등) 만 알아도 용의 차량을 좁히는 데 큰 도움이 될거로 추정된다.이 기능을 ..
[골드 3] 백준 16957 - 체스판 위의 공 (파이썬)
[골드 3] 백준 16957 - 체스판 위의 공 (파이썬)
2025.07.21분류 : DFS링크 : https://www.acmicpc.net/problem/16957풀이각 공이 어디로 떨어지는가가 아니라 각 골짜기로 얼마나 많은 공이 모이는가를 역방향으로 계산한다.각 칸에서 인접한 8방향 중 가장 낮은 칸으로 공이 흘러간다.그 흐름을 역방향 그래프로 만들어 두고, 실제로 공이 도달할 수 있는 최종 지점부터 시작해서, 역으로 DFS를 돌며 얼마나 많은 공이 이 칸으로 오는지 세는 방식이다.입력 처리R, C = map(int, input().split())B = [list(map(int, input().split())) for _ in range(R)]dr = [0, 0, 1, 1, 1, -1, -1, -1]dc = [1, -1, -1, 0, 1, -1, 0, 1]B[r][c]는 ..
[실버 4] 백준 25214 - 크림 파스타 (파이썬)
[실버 4] 백준 25214 - 크림 파스타 (파이썬)
2025.07.20분류 : 다이나믹 프로그래밍링크 : https://www.acmicpc.net/problem/25214풀이각 인덱스 i에 대해, D[i]는 A[0]부터 A[i]까지의 최솟값, E[i]는 E[i-1]과 (A[i] - D[i]) 중 더 큰 값이다.즉, E[i]는 앞에서부터 지금까지의 최댓값을 유지하면서, A[i]에서 이전까지의 최솟값을 뺀 값 중 최대를 갱신한다.D = [0] * NE = [0] * ND[i]는 A[0] ~ A[i] 중 최솟값을 나타내고, E[i]는 지금까지의 A[i] - D[i] 중 최대를 나타낸다.D[0] = A[0]for i in range(1, N) : D[i] = min(D[i - 1], A[i])최솟값 갱신은 위와 같이 작성하며, D[i]는 A[0] ~ A[i]에서의 최솟값을..
[골드 1] 백준 1311 - 할 일 정하기 1 (파이썬)
[골드 1] 백준 1311 - 할 일 정하기 1 (파이썬)
2025.07.19분류 : 다이나믹 프로그래밍링크 : https://www.acmicpc.net/problem/1311풀이이 문제는 N * N 크기의 비용 행렬 D가 주어지고, 사람 N명에게 각각 하나의 일을 배정하는데, 각 사람마다 각 일에 대한 비용이 다르다.각 사람에게 정확히 하나의 일만, 각 일도 정확히 한 사람에게만 배정되도록 하면서 총 비용의 합을 최소화 해야한다.초기 설정cache = [[-1] * (2 ** N) for _ in range(N)]cache[x][mask]는 x번째 사람까지 할당했을 때, mask 상태에서의 최소 비용을 저장한다.기저 조건if x == 0: for i in range(N): if mask == (2 ** i): cache[x][mask] =..
[골드 3] 백준 7579 - 앱 (파이썬)
[골드 3] 백준 7579 - 앱 (파이썬)
2025.07.18분류 : 다이나믹 프로그래밍링크 : https://www.acmicpc.net/problem/7579풀이메모리 확보를 위해서 필요한 최소 비용을 구하는 문제다.앱 N개가 있고, 각각 메모리 m[i], 비용 c[i]를 가진다.총 확보해야 할 메모리는 M보다 크거나 같으며, 비용의 합이 최소가 되도록 하는 앱을 선택한다.DP 테이블은 다음과 같이 정의한다.D = [[0] * 10001 for _ in range(N)]D[i][j]는 i번 앱까지 고려했을 때, 비용 j 이하로 확보 가능한 최대 메모리를 나타내며, 비용 최대치가 10000이므로 열 크기를 10001로 설정한다.# D[0][i] : 첫 번째 앱만 사용할 때의 최대 메모리for i in range(c[0], 10001) : D[0][i] = ..
[골드 5] 백준 11578 - 팀원 모집 (파이썬)
[골드 5] 백준 11578 - 팀원 모집 (파이썬)
2025.07.17분류 : 브루트포스 + 자료구조링크 : https://www.acmicpc.net/problem/11578풀이1번부터 N번까지의 문제를 모두 풀 수 있는 최소한의 팀원수를 구하는 문제이다.각 팀원은 자신이 풀 수 있는 문제 번호 리스트를 가지고 있다. 팀원은 M명이며, 문제를 모두 풀 수 있는 팀원의 최소 수를 구해야한다.A = [list(map(int, input().split()))[1:] for _ in range(M)]A = [set(a) for a in A]각 팀원이 자신이 풀 수 있는 문제 번호들을 입력받는다.list(map(int, input().split()))[1:] 에서 [1:] 부터 시작하는 이유는 첫 번째 숫자는 개수이므로 무시한다.set(a)로 변환해서 나중에 합집한 연산을 쉽게 ..
[골드 2] 백준 2450 - 모양 정돈 (파이썬)
[골드 2] 백준 2450 - 모양 정돈 (파이썬)
2025.07.16분류 : 브루트포스링크 : https://www.acmicpc.net/problem/2450풀이배열 A에는 1, 2, 3이 섞여있으면서, 각각 모양을 나타낸다.이 배열을 구간 3개로 나누어서, 각 구간에는 한 가지 모양이 있도록 정렬해야 한다.예를 들어서 [2, 2, 1, 1, 3, 3] 과 같은 형태이다.단, 숫자들을 바꾸는 횟수를 최소화 해아한다.입력 처리는 다음과 같다.N = int(input())A = list(map(int, input().split()))A = [x - 1 for x in A] # 0, 1, 2 로 바꿈입력 배열을 x - 1을 통해서 0, 1, 2로 정규화한다.그후 각 숫자의 개수를 센다.count = [0] * 3for x in A : count[x] += 1예를 들어..
[플래티넘 5] 백준 1981 - 배열에서 이동 (파이썬)
[플래티넘 5] 백준 1981 - 배열에서 이동 (파이썬)
2025.07.15분류 : 이분 탐색 + BFS링크 : https://www.acmicpc.net/problem/1981풀이N x N 크기의 정수 배열 A가 주어짐(0, 0) → (N-1, N-1)까지 상하좌우로 이동 가능단, 이동하는 칸의 숫자는 어떤 [min, max] 구간에 속해야 함이때 max - min 의 최소값을 구하는 것이 목적문제 풀이 아이디어는 다음과 같다.배열의 값은 최대 200이므로 min ~ max 범위가 0~200 사이임max - min mid 값을 이분 탐색으로 줄여나가며 최소값을 찾는 방식초기 설정은 다음과 같이 진행한다.low, high = 0, 200answer = -1mid = max_val - min_val 을 이분 탐색으로 줄여 나갈 범위이다.이분 탐색을 시작한다.while low 현재..
[골드 5] 백준 14567 - 선수과목 (Prerequisite) (파이썬)
[골드 5] 백준 14567 - 선수과목 (Prerequisite) (파이썬)
2025.07.14분류 : 다이나믹 프로그래밍링크 : https://www.acmicpc.net/problem/14567풀이총 N개의 과목이 주어지며, M개의 선수 조건이 주어진다.모든 과목에 대해 가장 빠른 이수 학기를 출력해야한다.N, M = map(int, input().split())adj = [[] for _ in range(N)]for _ in range(M) : a, b = map(int, input().split()) a, b = a - 1, b - 1 adj[b].append(a)adj[b].append(a)는 b를 듣기 위해 a를 먼저 들어야 한다는 조건이므로, b에서 a로 역방향 간선을 저장한다.즉, b의 선수 과목들을 adj[b]에 저장한다.cache = [-1] * Ncache[i]..
[골드 3] 백준 1719 - 택배 (파이썬)
[골드 3] 백준 1719 - 택배 (파이썬)
2025.07.13https://www.acmicpc.net/problem/1719분류 : 다익스트라링크 : https://www.acmicpc.net/problem/1719풀이이 문제는 어느 경로로 가는 것이 최단 경로인지를 알아내는 문제이다.각 도시(정점) 간의 최단 경로를 찾아야하며, 단순히 최단 거리만 출력하는 것이 아니라, 어디로 먼저 가야 하는지를 출력해야한다.즉, i → j 로 갈 때 첫번째로 가야하는 도시를 출력해야하는 것ㅇ디ㅏ.from queue import PriorityQueueN, M = map(int, input().split()) # 도시 수 N, 도로 수 Madj = [[] for _ in range(N)] # 인접 리스트# 간선 정보 입력for _ in range(M): a, ..