본문 바로가기

알고리즘

(30)
[백준] 25210번 정사각형 세기 [C++] https://www.acmicpc.net/problem/25210 접근 방식 먼저, 정사각형의 꼭짓점이 될 수 있는 구간을 정한다. 회전하지 않은 정사각형이 되야 하기 때문에, 빨간색 외의 부분은 점으로 선택되지 못한다. 따라서 이러한 부분을 없애준다. 두번째로 남은 부분에서, 좌 우 상 하 범위를 한정시켜 놨기 때문에, 1사분면과 3사분면만 생각해준다. 마지막으로 정사각형을 만들기 위해서, y=x+k(k는 문제의 범위인 -100000~100000) 형태의 그래프를 그려준다. 이 그래프가 1사분면의 정사각형에서 만나는 점 N개, 3사분면 정사각형에서 만나는 점 M개가 있다면, 이 때 그릴수 있는 정사각형의 개수는 N*M개 일 것이다. 이러한 과정을 모든 K에 대해서 해준 후 계산을 하면 답을 구할 수 ..
[백준] 9466번 텀 프로젝트 [C++] https://www.acmicpc.net/problem/9466 9466번: 텀 프로젝트 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 www.acmicpc.net 접근 방식 문제를 읽고, 해당 표에 대해서 그림을 그려보면 이러한 형태가 된다. 이 때, 프로젝트가 가능한 팀은 (3) , (4 ,6, 7) 이다. 따라서 이 문제의 답은 (1,2,5) 3개다. 즉 그림으로 보면 더 이해가 잘 되지만, 싸이클을 이루지 않는 원소의 수가 문제의 답이 된다는 뜻이다. 따라서, 이 문제를 해결하기 위해서 1번부터 n번까지 , 각각이 선택한 원소를 모두 탐색을 해 싸이클을 이..
[백준] 10775번 공항 [C++] https://www.acmicpc.net/problem/10775 10775번: 공항 예제 1 : [2][?][?][1] 형태로 도킹시킬 수 있다. 3번째 비행기는 도킹시킬 수 없다. 예제 2 : [1][2][3][?] 형태로 도킹 시킬 수 있고, 4번째 비행기는 절대 도킹 시킬 수 없어서 이후 추가적인 도킹은 불 www.acmicpc.net 접근 방식 유니온 파인드(분리 집합)을 사용하여 문제를 해결하였다. 현재 부모가 0이 아니라면 도킹이 가능한 것이다. 가능한 가장 큰 번호에 도킹을 한 후, 도킹을 더 할 수 없을 때 결과를 출력하면 되는데 이를 표현하기 위한 방식으로 도킹이 된 게이트의 부모를 (그 게이트 번호-1)라고 나타내겠다. 예를 들어서 3 2 3 3 4 이러한 형태의 입력이 주어졌다고 ..
[백준] 17069번 파이프 옮기기2 [C++] https://www.acmicpc.net/problem/17069 17069번: 파이프 옮기기 2 유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의 www.acmicpc.net 문제 설명 ㄴ 접근 방식 다이나믹 프로그래밍 방법으로 해결하였다. 먼저 DP라는 배열을 만들어줄건데, 이는 x 좌표, y 좌표 , 그리고 현재 놓여진 파이프의 모양이 3가지 정보가 담겨져 있다. 나는 파이프가 세로로 놓였을때를 0, 가로로 놓였을때를 1,대각선으로 놓였을때를 2로 할건데 이를 점화식으로 나타낸다면 DP[X][Y][0] -> DP[X-1][Y][0]+DP[X..
[백준] 1082번 방 번호 [C++] https://www.acmicpc.net/problem/1082 1082번: 방 번호 스타트링크가 입주한 사무실은 방 번호를 직접 정할 수 있다. 방 번호를 정하려면 1층 문방구에서 파는 숫자를 구매해야 한다. 숫자를 구매하기 위해 준비한 금액은 M원이고, M원을 모두 사용해 www.acmicpc.net 문제 설명 접근 방법 그리디 알고리즘으로 문제를 해결하였다. 우선, 자릿수가 길 수록 큰 수이기 때문에, 내가 만들 수 있는 가장 긴 자릿수를 구한다. 이는 가격이 가장 싼 번호 (단, 맨 처음에는 0이 되면 안된다.따라서 0을 제외한 가장 작은 수 A, 0을 포함한 가장 작은수 B를 각각 구해야 한다.) 로만 방을 구성했을 경우을 배열에 집어넣는다. 이는 ABBBBBBB... 이런한 꼴이 될 것이다...
[백준] 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][현재 위치에서 갈 수 있는..