파이썬 26

[BOJ] 1655. 가운데를 말해요

www.acmicpc.net/problem/1655 1655번: 가운데를 말해요 첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1 www.acmicpc.net 문제: 백준이가 외치는 수들의 가운데 수를 매번 구하라. 문제 이해하기!! 우선순위 큐를 이용한 가운데 수 구하기 문제입니다. 최대 우선순위 큐와 최소 우선순위 큐를 동시에 이용해서 경계 값을 찾아내면 됩니다. 그래서 푼 방법은 1. T == 1인상황과 2 이상인 상황을 분리시킵니다. 2. 2인 상황에서 최소힙이 (지금까지 부른 수들의 갯수 // 2)보다 작으면 최대힙의 팝한 숫자나 현재 숫자를..

Study/BOJ 2021.11.02

이분탐색 구현 (Python)

오랜만에 bisect 함수쓰면서 bisect함수랑 이분탐색을 훑어봐야지 하는 생각이 들더라구요. 그래서 문제를 하나 내고 1부터 1000,000,000까지의 값 중 임의값 찾기라는 임시문제를 내고 코드를 만들어 봤습니다. 먼저 파이썬의 bisect 라이브러리입니다. import bisect arr = range(1, 1000000000) idx = bisect.bisect_right(arr, 11) print(arr[idx]) # output: 12 arr = range(1, 1000000000) idx = bisect.bisect(arr, 11) print(arr[idx]) # output: 12 arr = range(1, 1000000000) idx = bisect.bisect_left(arr, 11..

Study/Argorithm 2021.10.29

[BOJ] 2096. 내려가기

www.acmicpc.net/problem/2096 2096번: 내려가기 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다. www.acmicpc.net 문제: 주어진 배열에서 인접한 부분으로 위에서 부터 내려가며 숫자를 더할 때, 최소 값과 최대 값을 구하여라 문제 이해하기!! DP문제로, 앞에서 더한 인접한 부분 것들에 최대 값과 최소 값을 구해서 더해가며 밑으로 내려가면 되는 문제입니다. 하지만 이 문제만 나온다면 골드문제가 아니라 실버 1~2 정도 문제겠죠? 이 문제는 DP로 푸는 방법만 구하는게 아니라 실제로 사용되는 메모리의 양도 중요했던 문제입니다. 이 문제를 풀..

Study/BOJ 2021.07.29

[BOJ] 11404. 플로이드

www.acmicpc.net/problem/11404 11404번: 플로이드 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 www.acmicpc.net 문제: 모든 도시에 대해서 도시 A에서 B로 가는데 필요한 비용의 최솟값을 구하라. 문제 이해하기!! 모든 도시로 가는 최소 비용을 구하면 되는 문제입니다. 한 루트의 최소비용을 구할 때는 다익스트라를 쓰지만, 모든 곳의 최소비용을 구할 때는 플로이드 와샬을 쓰면 됩니다. 다만 주의할 점은 정점의 갯수 ** 3 이므로 정점의 갯수가 작을 때 쓸 수 있습니다. 그래서 푼 방법은 1. 처음 받는 루트와 비용을 최소..

Study/BOJ 2021.07.18

[BOJ] 7662. 이중 우선순위 큐

www.acmicpc.net/problem/7662 7662번: 이중 우선순위 큐 입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적 www.acmicpc.net 문제: 최댓값과 최솟값을 뺄 수 있는 이중 우선 순위 큐를 만들어라 문제 이해하기!! 이중 우선 순위 큐면 사실 deque을 이용해서 뒤에서 빼고 앞에서 빼면 되지만, 이 문제에서는 insert까지 생각해야 합니다. 그러므로 새로운 방식으로 짜야하는데요, 그 방법은 최소, 최대 힙 두개를 사용한 방법입니다. 제가 푼 방식을 설명하자면, 1. 최소 최대 힙을 이용하여 각 Insert마다 숫자를 받고, 해당 숫..

Study/BOJ 2021.07.07

[BOJ] 9019. DSLR

www.acmicpc.net/problem/9019 9019번: DSLR 네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에 www.acmicpc.net 문제: DSLR이라는 4가지 명령어로 주어진 숫자를 목표값으로 최소한의 명령을 통해 바꾸어라. 문제 이해하기!! 아, 이 문제 너무 깐깐한 문제였습니다. 문제에 테스트케이스의 수가 나와있지 않고 시간제한이 6초라니.... 일단 알아본봐로는 테케 수가 최대 1만개라고 합니다! 참고^^ 이 문제를 풀려면 BFS 방법을 써야하는데요, 일단 4가지 명령어는 쉽게 구현됩니다. 하지만 여기서 DFS를 써버리면..

Study/BOJ 2021.07.01

[BOJ] 10026. 적록색약

www.acmicpc.net/problem/10026 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 문제: 적록색약이 아닌 사람이 봤을 때의 구역의 개수와 적록색약인 사람이 봤을 때의 구역의 수를 공백으로 구분해 출력하라. 문제 이해하기!! 구역을 나누는 것을 구해야 되는 문제입니다. 문제에서 나오는 적록색약은 미끼로 그냥 두 번 "R"을 "G"로 바꾸어 한 번 더 구하면 되는 문제였습니다. 그렇다면 어떻게 구역을 나눌까요. 저는 DFS로 완전탐색을 실시하였습니다. 해당 구역들을 찾기 위해서는 각 구역..

Study/BOJ 2021.06.24

[BOJ] 16928. 뱀과 사다리 게임

www.acmicpc.net/problem/16928 16928번: 뱀과 사다리 게임 첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으 www.acmicpc.net 문제: 뱀과 사다리 게임에서 주사위를 최소로 굴려 1부터 100까지 가장 빠르게 도착할 수 있게 하라. 문제 이해하기!! 뱀과 사다리 게임은 예전에 많이 해봤던 추억의 놀이죠. 그래서 문제를 쉽게 이해할 수 있었던 것 같습니다. 1부터 100까지이므로 모든 경우의 수를 다 확인하면 됩니다 ㅎㅎ (완전탐색!!) 다만, 주의할 점은 뱀으로 이동하면 100번까지 더 빨라..

Study/BOJ 2021.06.23

[BOJ] 1389. 케빈 베이컨의 6단계 법칙

www.acmicpc.net/problem/1389 1389번: 케빈 베이컨의 6단계 법칙 첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻 www.acmicpc.net 문제: 케빈 베이컨의 수가 최소인 사람의 번호를 출력하라. 문제 이해하기!! 케빈 베이컨이라하면 그래프의 한 노드에서 다른 노드로 최소 몇번을 걸쳐야 거기로 갈 수 있는지를 구하면 되는 문제입니다. 즉, BFS를 쓰면 되는 문제라고 볼 수 있습니다. ※ 다만, DFS를 쓰면 틀리니 주의하세요! DFS를 쓰면 틀리는 이유는 깊이와 너비 우선 방식의 노드 접근법을 생..

Study/BOJ 2021.06.23

[BOJ] 13418. 학교 탐방하기

www.acmicpc.net/problem/13418 13418번: 학교 탐방하기 입력 데이터는 표준 입력을 사용한다. 입력은 1개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 건물의 개수 N(1≤N≤1,000)과 도로의 개수 M(1≤M≤n*(n-1)/2) 이 주어진다. 입력의 두 번째 줄 www.acmicpc.net 문제: 피로도가 최악인 경로와 최적인 경로의 피로도 차이를 구하라. 문제 이해하기!! 학교의 입구부터 학교 건물을 모두 소개해주는 문제입니다. 모든 경로를 탐방해야하므로 최소 스패닝 트리 문제라고 할 수 있습니다. 그러므로 이제 제일 잘 알려진 프림 알고리즘과 크루스칼 알고리즘 중 하나를 선택하여 풀면됩니다. 음... 혹시나 둘 다 모르는 분은 다익스트라가 익숙하시면 프림으로 하시고..

Study/BOJ 2021.06.21
반응형