본문 바로가기

분류 전체보기

(31)
백준 1006번_습격자 초라기(Python) 문제 초라기는 한국의 비밀국방기지(원타곤)를 습격하라는 임무를 받은 특급요원이다. 원타곤의 건물은 도넛 형태이며, 초라기는 효율적인 타격 포인트를 정하기 위해 구역을 아래와 같이 두 개의 원 모양으로 나누었다. (그림의 숫자는 각 구역의 번호이다.) 초라기는 각각 W명으로 구성된 특수소대를 다수 출동시켜 모든 구역에 침투시킬 예정이며, 각 구역 별로 적이 몇 명씩 배치되어 있는지는 초라기가 모두 알고 있다. 특수소대를 아래 조건에 따라 침투 시킬 수 있다. 한 특수소대는 침투한 구역 외에, 인접한 한 구역 더 침투할 수 있다. (같은 경계를 공유하고 있으면 인접 하다고 한다. 위 그림에서 1구역은 2, 8, 9 구역과 서로 인접한 상태다.) 즉, 한 특수소대는 한 개 혹은 두 개의 구역을 커버할 수 있다..
백준 10942번_팰린드롬? (Python) 문제 시간제한: 0.5 초 명우는 홍준이와 함께 팰린드롬 놀이를 해보려고 한다. 먼저, 홍준이는 자연수 N개를 칠판에 적는다. 그 다음, 명우에게 질문을 총 M번 한다. 각 질문은 두 정수 S와 E(1 ≤ S ≤ E ≤ N)로 나타낼 수 있으며, S번째 수부터 E번째 까지 수가 팰린드롬을 이루는지를 물어보며, 명우는 각 질문에 대해 팰린드롬이다 또는 아니다를 말해야 한다. 예를 들어, 홍준이가 칠판에 적은 수가 1, 2, 1, 3, 1, 2, 1라고 하자. S = 1, E = 3인 경우 1, 2, 1은 팰린드롬이다. S = 2, E = 5인 경우 2, 1, 3, 1은 팰린드롬이 아니다. S = 3, E = 3인 경우 1은 팰린드롬이다. S = 5, E = 7인 경우 1, 2, 1은 팰린드롬이다. 자연수 ..
백준 1025번_제곱수 찾기 (Python) 문제 N행 M열의 표 A가 있고, 표의 각 칸에는 숫자가 하나씩 적혀있다. 연두는 서로 다른 1개 이상의 칸을 선택하려고 하는데, 행의 번호가 선택한 순서대로 등차수열을 이루고 있어야 하고, 열의 번호도 선택한 순서대로 등차수열을 이루고 있어야 한다. 이렇게 선택한 칸에 적힌 수를 순서대로 이어붙이면 정수를 하나 만들 수 있다. 연두가 만들 수 있는 정수 중에서 가장 큰 완전 제곱수를 구해보자. 완전 제곱수란 어떤 정수를 제곱한 수이다. 첫째 줄에 N, M이 주어진다. 둘째 줄부터 N개의 줄에는 표에 적힌 숫자가 1번 행부터 N번 행까지 순서대로 한 줄에 한 행씩 주어진다. 한 행에 적힌 숫자는 1번 열부터 M번 열까지 순서대로 주어지고, 공백없이 모두 붙여져 있다. 첫째 줄에 연두가 만들 수 있는 가장..
백준 3015번_오아시스 재결합 (Python) 문제 오아시스의 재결합 공연에 N명이 한 줄로 서서 기다리고 있다. 이 역사적인 순간을 맞이하기 위해 줄에서서 기다리고 있던 백준이는 갑자기 자기가 볼 수 있는 사람의 수가 궁금해 졌다. 두 사람 A와 B가 서로 볼 수 있으려면, 두 사람 사이에 A 또는 B보다 키가 큰 사람이 없어야 한다. 줄에 서있는 사람의 키가 주어졌을 때, 서로 볼 수 있는 쌍의 수를 구하는 프로그램을 작성하시오. 코드 from collections import deque N = int(input()) H = [] for i in range(N): H.append(int(input())) stack = deque() ans = 0 for i in range(N): while len(stack) and stack[-1][0] < H..
백준 17298번_오큰수 (Python) 문제 난이도: 골드4 크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다. 예를 들어, A = [3, 5, 2, 7]인 경우 NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1이다. A = [9, 5, 4, 8]인 경우에는 NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1이다. 입력: 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤..
자료구조_우선순위 큐 우선순위 큐는 스택과 큐처럼 자료들의 반환 순서가 정해져 있는 자료구조다. 일반적인 큐라면 선입선출의 원리를 따르는 단순한 자료구조로써, 단순히 1차원 배열을 사용해 구현할 수 있었다. 반면에, 우선순위 큐는 어떤 원소가 먼저 들어왔는지보다 각 원소의 우선순위를 더 우선시하여, 우선순위가 더 높은 원소가 먼저 빠져나가게 된다. 우선순위 큐는 기본적으로 이진 트리로 구현할 수가 있다. 이진 트리란, 모든 부모 노드가 자식 노드 최대 2개를 가지는 트리를 말한다. 이때 트리에서 부모가 자식보다 항상 우선순위가 크도록 배열한다. 즉, 루트 노드의 우선순위가 최대가 된다. 이렇게 되면 잘 구성된 이진 트리에서 바로 우선순위가 최대인 원소를 구할 수 있다. 그리고 다음과 같이 우선순위 큐를 일차원 배열로 저장할 ..
플로이드-워셜 알고리즘 증명 * 스스로 증명한 것이라 틀린 부분이 있을 수도 있습니다 플로이드 워셜 알고리즘의 알고리즘을 보면 D는 N*N의 2차원 리스트. 사이에 간선이 있는 두 점 i, j는 D[i][j]에 둘을 간선들 중 최소 길이를 저장. 그렇지 않은 두 점은 D[i][j]에 매우 큰 수(무한에 대응)를 저장 경유점 k를 1부터 N까지: 시작점 i를 1부터 N까지: 도착점 j를 1부터 N까지: D[i][j] = min(D[i][j], D[i][k]+D[k][1]) 과 같다. k가 x일 때(x는 1, 2, ... N) x단계라고 하자. 0단계는 알고리즘을 아예 적용하지 않은 상황으로 하자. 그리고 다음 명제를 P(k)로 두자. k단계까지 알고리즘을 시행했을 때 D[i][j]는 i부터 j까지 1부터 k까지의 경유점만을 사용할 때..
알고리즘_플로이드-워셜 알고리즘 플로이드-워셜 알고리즘(줄여서 플로이드 알고리즘)은 가중치가 있는 그래프에서 모든 정점 간 최단 거리를 구할 수 있는 알고리즘이다. BFS나 나중에 다뤄볼 다익스트라 알고리즘 등은 1회 실행 시 한 점에서 한 점으로 혹은 모든 점으로의 최단 거리만 구할 수 있지만, 플로이드 알고리즘은 단 한 번의 실행으로 모든 점에서 모든 점으로를 구할 수 있다. 플로이드 알고리즘은 기존까지 알려진 최단 경로와 어떤 특정한 점을 '경유점'으로 사용할 때를 비교해 최단 경로를 갱신하는 알고리즘이다. 그 서술은 다음과 같다. 정점이 N개인 그래프에서, N*N인 2차원 리스트를 만든 후, 각 점 (i, j)에는 i번째 정점에서 j번째 정점으로 가는 간선의 길이(초기 최단경로)를 저장한다. 간선이 없으면 INF(무한대)를 입력..
군론 공부 5_ 준동형사상의 기본 정리 1. 사상 '사상'이란 두 집합의 원소들을 특정한 함수로 서로 대응시키는 것을 의미한다. 예를 들어 {1, 2, 3}에서 함수 (홀수)$\to$1 (짝수)$\to$0 를 이용해 {0, 1}을 만드는 것은 {1, 2, 3}에서 {0, 1}로의 사상이 된다. 2. 준동형사상 군과 군 사이에도 역시나 사상을 취할 수 있다. 이때 '준동형사상'이라는 특별한 사상을 만드는 것도 가능하다. 두 군 G, H에 대하여 f: G$\to$H가 아래 조건을 만족할 때 f를 준동형사상이라고 한다. G의 임의의 원소 x, y에 대해 f(xy) = f(x)f(y) (단, 좌변은 G의 연산으로 xy를, 우변은 H의 연산으로 f(x)f(y)를 계산) 그리고 f가 G에서 H로의 전사함수, 즉 H의 모든 원소들에 대해 각 원소를 f(x..
알고리즘_BFS(너비우선탐색) 대표적인 두 가지 그래프 탐색 알고리즘 중 하나인 BFS에 대해서 알아보자. (나머지 하나인 DFS는 여기서 확인할 수 있다.) BFS는 한 정점으로부터 시작해 '넓게 퍼져가며' 그래프를 탐색하는 이미지다. 조금 더 명확하게는, 한 정점과 직접적으로 연결된 모든 정점을 탐색한 뒤 방금 탐색한 정점들과 연결된 다른 정점들을 탐색하면서 연쇄적으로 탐색이 일어나는 방식이다. BFS의 과정을 아래처럼 그래프로 보면 한 점에서부터 시작해 간선 하나로 연결된 인근한 정점, 그다음은 간선 두개로 연결된 정점들로 탐색 대상이 점점 퍼져나가는 형태가 된다. 시작점과 연결된 두 정점을 먼저 탐색한다. 그다음은 방금 탐색한 두 점과 연결된 다섯 개의 점을 탐색한다. 그다음은 다섯 점 중 2번째 점과 연결된 나머지 한 점을 ..