알고리즘
-
[BOJ] 14890번 경사로알고리즘/BOJ 2020. 7. 26. 14:35
https://www.acmicpc.net/problem/14890 14890번: 경사로 첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다. www.acmicpc.net 아이디어 행과 열에 한 줄에 대하여 양 옆으로 한번씩 조사를 하면서 길이 될지 조사를 함 1, 행 - 왼쪽에서 오른쪽으로 가는 길을 조사를 하고 올라가는 경우에 대하여 길이 l에 대하여 조사를 함 - 내려가는 길에 대하여는 높이차이가 1인 경우에만 길조건 조사를 함 - 마찬가지로 오른쪽에서 왼쪽으로 가는 길을 조사를 마찬가지 방법으로 수행을 함 (이때, 왼쪽에서 오른쪽으로 가면서 올라가기 위해 경사로를 놓은 부분을 표시..
-
[BOJ] 14889 스타트와 링크알고리즘/BOJ 2020. 7. 26. 03:48
https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 아이디어 방법1 dfs를 이용하여 팀이 될 수 있는 모든 경우의 수를 구한 다음 능력치의 차이를 계산 - 기존 시작 시에는 다들 0번 팀이라고 배치하고 팀을 부여함 - 재귀문을 통하여 한사람씩 1번 팀을 경우의 수마다 부여를 하고 해당 인원의 반이 1번팀의 배치가 되었으면 능력치 차이를 계산 방법2 비트 마스킹 방법을 이용하여 팀을 구분한 다음 능력치의 차이를 계산 -예시 : 110100 - 오른쪽부터 왼쪽 순으로 사..
-
[BOJ] 14888 연산자 끼워넣기알고리즘/BOJ 2020. 7. 26. 00:16
https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, �� www.acmicpc.net 아이디어 1, dfs로 숫자를 돌면서 연산자가 들어 갈 수 있는 모든 경우의 수를 탐색하면서 만들 수 있는 최대값과 최소값을 구한다. #include #include using namespace std; int max_num = -1000000001; int min_num = 1000000001; int num; vector num_ar..
-
[BOJ] 11055번 가장 큰 증가 부분 수열알고리즘/BOJ 2020. 7. 11. 16:00
https://www.acmicpc.net/problem/11055 11055번: 가장 큰 증가 부분 수열 수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수� www.acmicpc.net 11053번 가장 긴 증가하는 부분 수열과 비슷한 문제 아이디어 1, dp의 개념으로 시간 복잡도 O(n^2)로 풀이가 가능 2, , 해당 배열의 숫자를 왼쪽부터 오른쪽으로 순회를 하면서 dp배열에 해당 숫자를 끝으로 증가하는 부분 수열을 만들었을 때 합의 최댓값을 누적하여 저장한다. 예시 5번째의 숫자까지의 증가하는 부분 수열로 만들 ..
-
[BOJ]11053번 가장 긴 증가하는 부분 수열알고리즘/BOJ 2020. 7. 11. 15:50
https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 아이디어 1, LIS기초 문제 2, dp의 개념으로 시간 복잡도 O(n^2)로 풀이가 가능 3, 해당 배열의 숫자를 왼쪽부터 오른쪽으로 순회를 하면서 dp배열에 그 숫자가 들어갈 수 있는 최대 index를 구한다. 예시 5번째의 숫자의 최대 index값을 구하고자 하면 0~4까지의 dp배열을 순회하면서 5번째의 숫자보다..
-
[BOJ] 14499번 주사위 굴리기알고리즘/BOJ 2020. 7. 11. 13:08
해당 문제 링크 https://www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지도 www.acmicpc.net 아이디어 1, 시뮬례이션 문제 2, 서쪽, 동쪽, 북쪽, 남쪽으로 각각 주사위를 굴릴 경우 주사위의 상태를 저장해 주고 지도의 상태를 갱신하여 준다. 예시) 만약 주사위를 남쪽으로 굴렸을 경우 윗쪽 -> 앞쪽으로 앞쪽 -> 아래쪽으로 아래쪽 -> 뒷쪽 뒷쪽 -> 윗쪽 굴린이후 해당 문제의 조건의 맞게 지도 혹은 주사..
-
[BOJ] 17825번 주사위 윷놀이알고리즘/BOJ 2020. 7. 9. 21:10
해당 문제 링크 https://www.acmicpc.net/problem/17825 17825번: 주사위 윷놀이 첫째 줄에 주사위에서 나올 수 10개가 순서대로 주어진다. www.acmicpc.net . 아이디어 1, 윷놀이 판을 어떻게 정보를 저장할 지부터 시작 - 각각의 위치에 번호를 부여하고 map에 붉은색으로 연결되어 있는 위치를 저장 2, 윷놀이 판의 점수 부분을 score으로 관리 3, 파란색 부분을 blue_point으로 관리 4, dfs탐색을 하여 모든 경우를 고려함 소스코드 #include #include using namespace std; int dice_num[10]; int map[50]; int score[50]; int blue_point[50]; int res = -1; in..