본문 바로가기
728x90
반응형

분류 전체보기240

[BOJ] 11052번 카드 구매하기 / 사용언어 : 파이썬(python) ※ 문제링크 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net 해당문제는 동적프로그래밍과 관련된 문제로, 해결을 위해서는 점화식을 도출하는 것이 필수적이었다. 점화식을 도출하기 위해 가장 작은 단위부터 원리를 생각해봤을때, 카드팩을 1개살때는 P1을, 2개살때는 P1 + P1 과 P2중에 큰 값을, 3개 살때는 P1+P1+P1, P2 + P1, P3중 큰 값을 구하면 되었다. 즉, 구해야하는 카드의 수가 i일때, 1부터 i-1까지의 조합들의 값을 반복문을 통해 dp[i]에 저장된 값과 비교하여 큰 값으로 갱신하게끔 하면.. 2022. 2. 20.
[BOJ] 14938번 서강그라운드 / 사용언어 : 파이썬(python) ※ 문제링크 14938번: 서강그라운드 예은이는 요즘 가장 인기가 있는 게임 서강그라운드를 즐기고 있다. 서강그라운드는 여러 지역중 하나의 지역에 낙하산을 타고 낙하하여, 그 지역에 떨어져 있는 아이템들을 이용해 서바이벌을 www.acmicpc.net 해당 문제는 양의 가중치가 있는 최단경로를 구하는 문제로 다익스트라 알고리즘을 활용하여 해결할 수 있는 문제였다. 기본적인 다익스트라 알고리즘을 작성하여 각각의 정점에서 다른 정점으로 가는 최단 경로를 확인한 후 조건에 맞으면 item의 개수를 더해서 얻을 수 있는 가장 많은 item수를 출력하면 되는 문제였다. 자세한 풀이방법과 코드는 아래와 같다. 1. 입력받은 값들 각각의 변수들에 저장하고, 각 정점에 대한 item의 개수는 리스트에 저장한다. 2. .. 2022. 2. 19.
[BOJ] 14225번 부분수열의 합 / 사용언어 : 파이썬(python) ※ 문제링크 14225번: 부분수열의 합 수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오. 예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들 www.acmicpc.net 해당문제는 모든 경우의 수를 탐색해서 결과값을 확인하여 해결할 수 있는 문제였다. 다만, 숫자들의 조합에서 순서는 의미를 가지지않았기에 순열이 아닌 조합의 형태로 코드를 작성해야했다. 해당 조건을 고려하여 문제를 해결하였으며, 자세한 풀이방법과 코드는 아래와 같다. 1. 입력받은 값들을 리스트형태로 저장해준다. 2. 입력될 수 있는 리스트의 길이와 값을 바탕으로 방문여부를 확인할 리스.. 2022. 2. 19.
[BOJ] 2003번 수들의 합 2 / 사용언어 : 파이썬(python) ※ 문제링크 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net ※ 관련개념 [Algorithm] 투포인터(Two Pointer) 알고리즘 알고리즘 문제를 풀다보면 종종 나오는 투포인터 알고리즘! 막 꼬여가지고 ㅋㅋㅋ 저도 중간에 제대로 못짜고 그러는 경우가 많은데요, 많은 코딩테스트 문제에 등장하는 것은 아니지만 잊을만 butter-shower.tistory.com 해당 문제는 투 포인터 알고리즘을 활용하면 해결할 수 있는 문제였다. 문제를 풀기전 해당 알고리즘의 원리를.. 2022. 2. 16.
[BOJ] 1182번 부분수열의 합 / 사용언어 : 파이썬(python) ※ 문제링크 1182번: 부분수열의 합 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 해당 문제는 DFS와 백트래킹을 활용하여 모든 경우의 수를 탐색하여 풀 수 있는 문제였다. 기본적인 풀이원리는 입력받은 값들을 바탕으로 길이가 1인 행렬부터 길이가 N인 행렬까지 가능한 모든 경우의 수를 탐색하고 그 합이 요구치와 같으면 값을 더하는 방식으로, 브루스포트 알고리즘과 DFS를 이해하고 있으면 비교적 쉽게 해결할 수 있는 문제였다. 자세한 풀이방법과 코드는 아래와 같다. 1. 입력받은 값들을 저장하고,.. 2022. 2. 15.
[BOJ] 5014번 스타트링크 / 사용언어 : 파이썬(python) ※ 문제링크 5014번: 스타트링크 첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다. www.acmicpc.net 해당 문제는 BFS를 활용하여 해결할 수 있는 문제였다. 주의해야할 점은 건물의 최소 층수가 1층이라는 점과 출발층과 목표층이 같을수 있다는 점이었다. 그 이외에는 BFS와 queuq자료구조를 활용하면 비교적 쉽게 해결할 수 있는 문제였다. 자세한 문제풀이방법과 코드는 아래와 같다. 1. 입력받은 값들을 따로 숫자형태로 저장해준다. 2. 한번에 움직일 수 있는 경우의 수들을 확인하고, 조건에 맞으면 queue자료구조에 넣고 추출하여 방문여부를 확인하는 방식으로 .. 2022. 2. 14.
[BOJ] 1715번 카드 정렬하기 / 사용언어 : 파이썬(python) ※ 문제링크 1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net 해당 문제는 우선순위큐 자료구조를 활용해서 풀 수 있는 문제였다. Python에서는 heapq라이브러리를 통해 최소힙을 사용할 수 있기에 해당 라이브러리를 사용해서 문제를 해결했다. 간단하게 풀이방법을 설명하면 자료구조에서 작은 값부터 2번씩 뽑고, 1번째 뽑을때는 단순히 기록만하고, 2번째 뽑을 때는 기록 후 다시 힙 자료구조에 넣어주어 힙 자료구조가 빌 때까지 반복해주면 되는 문제였다. 자세한 문제풀이방법과 코드는 아래와 같다. 1.. 2022. 2. 13.
[BOJ] 11779번 최소비용 구하기 2 / 사용언어 : 파이썬(python) ※ 문제링크 11779번: 최소비용 구하기 2 첫째 줄에 도시의 개수 n(1≤n≤1,000)이 주어지고 둘째 줄에는 버스의 개수 m(1≤m≤100,000)이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스 www.acmicpc.net 해당 문제는 가중치가 있는 최단거리경로를 구하는 것과 관련된 문제로 가중치에 음수가 없으므로 다익스트라 알고리즘을 활용하여 해결할 수 있는 문제였다. 다만 경유하는 도시들의 숫자와 도시들을 같이 출력해줘야하는 것이 문제조건이기에 해당 부분만 추가하면 생각보다 쉽게 해결할 수 있는 문제였다. 자세한 문제풀이방법과 코드는 아래와 같다. 1. 입력받은 값들을 바탕으로 리스트를 활용하여 그래프를 구현해준다. 2. heapq와 .. 2022. 2. 12.
[BOJ] 2075번 N번째 큰 수 / 사용언어 : 파이썬(python) ※ 문제링크 2075번: N번째 큰 수 첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다. www.acmicpc.net 해당문제는 우선순위큐 자료구조를 통해 값을 저장하고 정렬하여야 풀 수 있는 문제였다. 파이썬에서는 heapq로 해당 자료구조를 지원해주고 있기에 활용하여 해결하였다. 주의해야할 점은 문제의 메모리제한이 상당하기 때문에 입력값을 모두 저장한 후 정렬후 값을 꺼내서 출력하면 안된다는 점이다. 문제의 조건에 의하면 n번째로 입력받은 값들 중 1개값은 무조건 n-1번째로 입력받은 값들 보다 크다는 점을 이용하여 문제를 해결하였다. 자세한 문제풀이방법과 코드는 아래.. 2022. 2. 10.
728x90
반응형