본문 바로가기
728x90
반응형

BOJ71

[BOJ] 4485번 녹색 옷 입은 애가 젤다지? / 사용언어 : 파이썬(python) ※ 문제링크 4485번: 녹색 옷 입은 애가 젤다지? 젤다의 전설 게임에서 화폐의 단위는 루피(rupee)다. 그런데 간혹 '도둑루피'라 불리는 검정색 루피도 존재하는데, 이걸 획득하면 오히려 소지한 루피가 감소하게 된다! 젤다의 전설 시리즈의 주 www.acmicpc.net 해당 문제는 다익스트라 알고리즘으로 사용하여 해결 가능한 문제였다. 다익스트라를 구현하기 위해 파이썬의 heapq을 사용하였고,그 외에는 다른 BFS문제와 같은 형태로 로직을 구성하여 구현하였다. 자세한 풀이방법과 코드는 아래와 같다. 1. 지정된 조건이 나올때까지 반복루프를 돌 수 있게 작성하고 입력값들을 바탕으로 동굴을 갱신하여 저장한다. 2. heapq와 리스트를 활용하여 다익스트라 알고리즘을 구현하고 return값을 최저비용.. 2022. 2. 22.
[BOJ] 15686번 치킨배달 / 사용언어 : 파이썬(python) ※ 문제링크 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 해당문제는 DFS와 백트래킹으로 풀 수 있는 문제였다. 모든 경우의 수를 탐색해야하기에 브루스포트 알고리즘으로도 볼 수 있는 문제였으며, 간단하게 풀이방법을 설명하면 DFS와 백트래킹을 이용하여 치킨집이 존재할 수 있는 모든 경우의수(조합)을 구하고 문제에서주어진 거리 공식을 활용하여 거리를 계산하여 최솟값을 출력하면 되는 문제였다. 자세한 풀이방법과 코드는 아래와 같다. 1. 입력받은 값들을 바탕으로 치킨상점과 집의 최초 위치를.. 2022. 2. 21.
[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.
728x90
반응형