728x90

python 107

[백준] 28240 | S리그 [파이썬/python]

문제link: https://www.acmicpc.net/problem/28240패스 경로가 교차하지 않도록 n명의 학생들을 각기 다른 좌표에 배치하는 문제이다.패스 연습은 다음과 같이 이루어진다.1. 인접한 번호의 학생끼리 패스(1-2, 2-3, ..., (n-1)-n, n-1)2. Kobe와 LeBron끼리 패스3. Curry와 Jordan끼리 패스 접근다양한 답이 나올 수 있는 재미있는 문제라고 생각한다.개발블로그에 쓸 만한 말은 아니지만 솔직히 나는 기하학에 젬병이다(ㅠㅠ) 하지만 이 문제는 기하학에 조예가 깊지 않은 사람도 머리를 굴려 보면 풀 수 있을 법한 문제 같아서 여러 그래프를 그리며 풀어 보았다.최종 답안은 첨부한 사진의 맨 아래 그래프와 비슷한 형태이다.(완전히 동일하진 않고 사용한 ..

알고리즘 2025.11.18

[백준] 16517 | Tima goes to Xentopia [파이썬/python]

문제link: https://www.acmicpc.net/problem/16517시작점 S에서 T까지 가는 가장 짧은 시간을 출력하는 문제이다. s에서 t로 이동할 때는 정확히 k1개의 빨간색 선로와 k2개의 파란색 선로를 사용해야 한다. 불가능하다면 -1을 출력한다. 접근우선순위 큐를 활용했고, dist[v][r][b]에 r개의 빨간색 선로와 b개의 파란색 선로를 사용해서 노드 v에 도달했을 때 걸리는 시간의 최솟값을 기록하도록 했다. 코드import sysinput = sys.stdin.readlineimport heapqn, m, k1, k2 = map(int, input().split())graph = [[] for _ in range(n+1)]for _ in range(m): u, v, ..

알고리즘 2025.11.10

[백준] 8972 | 미친 아두이노 [파이썬/python]

문제link: https://www.acmicpc.net/problem/8972 접근문제에서 제시하는 대로 아두이노와 종수의 움직임을 시뮬레이션해보면 쉽게 풀 수 있는 문제이다.아두이노 여러 개가 같은 위치에 모이면 폭발하여 사라지는데, 두 개 이상의 아두이노가 부딪힐 가능성이 있기 때문에 위치가 겹친다고 바로 제거해서는 안 된다. 아래 코드에서는 폭발할 아두이노를 따로 저장해 두었다가 추후 처리하는 식으로 코드를 작성했다. 코드import sysinput = sys.stdin.readline#보드의 크기: r*cr, c = map(int, input().split())ard = set() #아두이노 위치를 저장할 집합js = [] #종수의 위치#초기 보드판 정보를 입력받아 아두이노와 종수의 위치를 저장..

알고리즘 2025.11.04

[백준] 9255 | The Friend of My Enemy is My Enemy [파이썬/python]

문제link: https://www.acmicpc.net/problem/9255 접근친구관계를 이차원 리스트에 저장한 후 답을 출력하도록 코드를 구성했다. 간단한 문제이다.문제에 Each data set should be followed by a blank line이라고 되어 있어 헷갈렸는데, 마지막 데이터 세트 결과 출력 이후에는 빈 줄을 출력하지 않아야 한다.일괄적으로 빈 줄을 출력하도록 뒀더니 출력 형식 오류가 발생해 코드를 아래와 같이 수정해 제출했다. 코드import sysinput = sys.stdin.readlinek = int(input())for t in range(1, k+1): n, m = map(int, input().split()) graph = [[] for _ in ..

알고리즘 2025.10.30

[백준] 15747 | Taming the Herd [파이썬/python]

문제link: https://www.acmicpc.net/problem/15747 접근n의 범위가 1 코드import sysinput = sys.stdin.readlineINF = float('inf')n = int(input())log = list(map(int, input().split()))#dp[날짜][breakout 횟수][counter] = 변경 횟수 최솟값dp = [[[INF]*(n+1) for _ in range(n+1)] for _ in range(n)]dp[0][1][0] = 0 if log[0] == 0 else 1for i in range(1, n): for j in range(1, i+2): for k in range(n): #이전 상태 dp[i-..

알고리즘 2025.10.25

[백준] 26656 | 점프킹 [파이썬/python]

문제link: https://www.acmicpc.net/problem/26656 접근union-find를 응용하면 풀 수 있는 문제였다.메모리와 실행 시간이 생각보다 컸다ㅎㅎ... pypy3을 쓰면 조금 나아질지도 모르겠다. 코드import sysinput = sys.stdin.readline#칸에 적힌 방향, 숫자에 따라 점프 감옥 내부를 순회하는 함수def dfs(x, y): s = [] root = -1 while 1: if visited[x][y]: root = find(convert(x, y)) break visited[x][y] = 1 s.append((x, y)) dx, dy = dir..

알고리즘 2025.10.11

[백준] 32293 | ABB to BA (Hard) [파이썬/python]

문제link: https://www.acmicpc.net/problem/32293주어진 문자열의 ABB를 BA로 바꾸어 출력하는 문제이다. 접근스택을 이용하면 쉽게 풀 수 있다. 코드import syssys.setrecursionlimit(10**6)input = sys.stdin.readline#'B'를 stack에 넣어야 할 때 실행하는 함수def add_b(): #'ABB'이면 if len(stack) >= 2 and stack[-2] == 'A' and stack[-1] == 'B': stack.pop() stack.pop() #'BA'를 삽입 add_b() stack.append('A') else: stack...

알고리즘 2025.10.10

[백준] 27966 | △ [파이썬/python]

문제link: https://www.acmicpc.net/problem/27966정점의 개수 n을 입력받아, 모든 두 정점 i, j에 대한 i와 j 사이 거리 총합이 최소가 되는 트리를 만드는 문제이다.거리 총합과 트리의 간선 정보를 답으로 출력한다. 접근루트 노드를 제외한 모든 노드가 루트 노드의 자식 노드이도록 트리를 구성하면 된다. 코드import sysinput = sys.stdin.readlinen = int(input())print((n-1)*(n-1))for i in range(2, n+1): print(1, i)

알고리즘 2025.10.09

[백준] 2931 | 가스관 [파이썬/python]

문제link: https://www.acmicpc.net/problem/2931 접근모든 칸을 순회하며, 빈칸('.')인 경우, 주위에 빈칸 방향으로 열린 가스관이 있는지 확인한다. 코드import sysinput = sys.stdin.readlined = ((1, 0), (0, 1), (-1, 0), (0, -1))arr = [{'|', '+', '2', '3'}, {'-', '+', '3', '4'}, {'|', '+', '1', '4'}, {'-', '+', '1', '2'}]road = {0b1111: '+', 0b1010: '|', 0b0101: '-', 0b1100: 1, 0b0110: 2, 0b0011: 3, 0b1001: 4}r, c = map(int, input().split())boar..

알고리즘 2025.10.08
728x90