본문 바로가기

전체 글

(56)
[백준] 1655번 가운데를 말해요 [C++] https://www.acmicpc.net/problem/1655 1655번: 가운데를 말해요 첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1 www.acmicpc.net 문제 접근 방식 시간제한이 매우 짧아서 입력과 동시에 어떤 수를 출력할지를 정해야한다. 그러기 위해서 우선 하나는 오름차순으로,하나는 내림차순으로 두가지의 우선순위 큐를 만든다. 그리고 숫자가 입력될 때마다 현재의 mid값과 비교해서 큐에 넣어주는데, 입력된 숫자가 mid보다 작다면 입력된 숫자가 mid보다 크거나 같다면 두가지로 나뉜다. 1 번일 경우에는 입력된 숫자를 내림차순으..
[백준] 11053번 가장 긴 증가하는 부분 수열 [C++] https://www.acmicpc.net/problem/11053 문제 접근 방법 예를 들어 1, 2 , 5 , 4 라는 수열이 있다고 하면, 원소가 1개일 때 가장 긴 부분수열은 1이다. 이를 DP[1] = 1 이라고 정리를 한다. 원소가 2개일 때는 가장 긴 부분수열은 1,2이다. 이는 2번째 원소인 2를 1뒤에 붙힌 것이며, 이를 DP[2]=DP[1]+1=2 이라고 표현 할 수 있다. 원소가 3개일 때 가장 긴 부분수열은 1,2,5이다. 이는 3번째 원소를 1,2 뒤에 분힌 것이다. 이는 두가지 경우중에 더 큰 경우를 선택한 것인데, {1} 뒤에 5을 붙힌 경우 or {1,2}뒤에 5을 붙힌 경우 중 두번째를 선택한 것이다. 즉 DP[3]=DP[2]+1이라고 할 수 있다. 마지막으로 원소가 4개 ..
[백준] 25216번 파밍루트 [C++] https://www.acmicpc.net/problem/25216 25216번: 파밍 루트 경태는 인하대학교에서 유행하는 게임 Conquer The Planet(이하 CTP)에 빠져있다. CTP를 열심히 플레이하던 어느 날, 경태는 게임 속에 숨겨져 있던 던전을 발견했다! 던전 입구에는 플레이어를 위한 설 www.acmicpc.net 문제 접근 방법 우선 방어력에 초점을 두지 말고, 내가 구할 수 있는 가장 많은 금화의 양을 계산을 해야한다. 방어력을 max값으로 두고,어느 지점에서도 막히지 않게 한다면 주어진 시간동안 구할 수 있는 가장 많은 금화를 구할 수 있다. 이는 다이나믹 프로그래밍 방법으로 구하게 됐는데, DP[남은 시간][현재 위치]=max(DP[남은시간 - 1][현재 위치에서 갈 수 있는..
[백준] 25208번 새벽의 탐정 게임 [C++] https://www.acmicpc.net/problem/25208 25208번: 새벽의 탐정 게임 새벽의 탐정 게임은 재미있는 2인용 보드게임이다. 한 명은 탐정, 다른 한 명은 도둑 역할을 맡는다. 게임은 $N$행 $M$열 격자 위에서 진행된다. 격자의 각 칸은 벽이 설치되어 있거나 비어있고, 역 www.acmicpc.net 문제 문제 요약 문제가 너무 김에 따라서 요약을 하자면, 위와 같은 판에 도둑, 탐정 두가지가 있는데, 탐정은 상하좌우 4가지 방향 중 한곳으로 움직일 수 있다. 탐정은 위의 전개도로 만들어지는 감옥을 본인 시작 지점에서 바닥이 뚫린 채로 시작하며, 움직이는 방향에 따라서 주사위처럼 비어있는 부분또한 움직이게 된다. 도둑을 가두기 위해서는 도둑이 있는 지점에 감옥의 바닥이 뚫린 ..
[백준] 25215번 타이핑 [C++] https://www.acmicpc.net/problem/25215 25215번: 타이핑 민겸이는 영어 소문자와 대문자로 이루어진 문자열을 타이핑하기로 했다. 민겸이가 사용할 수 있는 버튼은 26개의 영어 알파벳 버튼과 마름모(◆) 버튼, 별(★) 버튼이다. 각 버튼은 아래와 같이 www.acmicpc.net 문제 설명 먼저 각 각 경우를 생각해야 한다. aaAaa 와 같이 소문자들 사이에 대문자가 1개 있을 경우, aaa★aa->6번만에 해결 가능 aa◆a◆aa->7번만에 해결 가능 aaAAa와 같이 소문자들 사이에 대문자가 2개 있을 경우, aaa★a★a->7번만에 해결 가능 aa◆aa◆a->7번만에 해결 가능 aAAAa와 같이 소문자들 사이에 대문자가 3개 있을 경우, aa★a★a★a->8번만에 해..
[백준] 25212번 조각케이크 [C++] https://www.acmicpc.net/problem/25212 25212번: 조각 케이크 조각 케이크들을 골랐을 때, 고른 조각 케이크를 모두 합쳐서 케이크 한 판으로 만들 수 있는 경우의 수를 출력한다. www.acmicpc.net 문제 설명 접근 방법 조각 케이크의 갯수가 최대 10개기 떄문에 브루트포스 방식을 사용해 모든 경우의수를 찾아내도 자원소모가 크지 않다. 따라서 브루트포스 방식을 통해 각각 경우마다 케이크 조각들의 총 합이 101/100(1.01)을 넘어갈 경우에 더 탐색을 하지 않고, 총 값이 101/100 와 99/100 사이에 있다면 탐색을 하지 않고 결과값을 1 늘린다. 이러한 방식대로 모든 경우를 다 탐색하면 가능한 모든 경우를 찾을 수 있다. #include #include..
[백준] 25214번 크림 파스타 [C++] https://www.acmicpc.net/problem/25215 25215번: 타이핑 민겸이는 영어 소문자와 대문자로 이루어진 문자열을 타이핑하기로 했다. 민겸이가 사용할 수 있는 버튼은 26개의 영어 알파벳 버튼과 마름모(◆) 버튼, 별(★) 버튼이다. 각 버튼은 아래와 같이 www.acmicpc.net 문제 설명 접근 방법 먼저, 여태까지 나온 수 중 가장 작은수가 무엇인지를 구한다. 이를 위해서는 입력과 동시에 여태까지 나온 수 중에 가장 작은 수와 입력된 값을 비교하면 된다. 그 후에는 (현재 값- 가장 작은 값)이 여지껏 나온 결과 값 중에 가장 크다면 그 값을, 아니라면 이전의 나온 결과 값을 출력하면 된다. 코드 #include #include using namespace std; int..
[백준] 1516번 게임개발 [C++] https://www.acmicpc.net/problem/1516 1516번: 게임 개발 첫째 줄에 건물의 종류 수 N(1 ≤ N ≤ 500)이 주어진다. 다음 N개의 줄에는 각 건물을 짓는데 걸리는 시간과 그 건물을 짓기 위해 먼저 지어져야 하는 건물들의 번호가 주어진다. 건물의 번호는 1부 www.acmicpc.net 문제 접근 방식 위상 정렬을 통해, 건물을 순서대로 지으면 된다. 순서대로 짓는 과정에서, 건물을 지을 때 의 최소 시간을 구하는 방식은 다이나믹 프로그래밍 기법을 사용하면 되는데 현재 건물까지 짓는 시간 = max(선행 건물 중 가장 오래 걸리는 건물) + 현재 건물을 짓는데 걸리는 시간 이라는 식이 세워지게 된다. #include #include #include using names..