목록데이터 엔지니어링 정복/Algorithm (159)
지구정복
https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net -문제해설 입력값인 카드의 개수 n과 주어진 카드 3장을 더해서 최대한 가깝게 만들어야 되는 수 m이 주어지면 출력값으로는 가장 m과 가까운 수를 출력하는 문제이다. 나는 단순하게 주어진 카드를 모두 비교하는 방법으로 문제를 해결했다. 먼저 한 번 반복시 담을 sum 변수와 최종적인 답이 담길 ans 변수를 선언하고 i, j, k 변수를 이용해서 삼중 포문을 돌린다..
https://www.acmicpc.net/problem/2775 2775번: 부녀회장이 될테야 첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다 www.acmicpc.net -문제해설 다이나믹 프로그래밍을 이용해서 풀었다. d라는 배열을 만들고 행은 k+1까지, 열은 n까지 크기로 만든다. d = new int[k+1][n]; 그리고 이중포문을 순회한다. 이때 행을 i, 열을 j라고 하면 i=0일때 즉 0행일 때는 d[0][0], d[0][1], d[0][2]에 각각 1, 2, 3이 들어가도록 한다. 그리고 j=0일 때 즉 0열일 때는 항상 1이므로 d[0][0], d[1][0], d[2][0]에 모두 1이..
https://www.acmicpc.net/problem/2292 2292번: 벌집 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌 www.acmicpc.net -문제해설 1일 때는 벌집 1개 2부터 7까지는 벌집 2개 8부터 19까지는 벌집 3개 20부터 37까지는 벌집 4개 38부터 61까지는 벌집 5개 . . . 이 필요하므로 d라는 배열에 벌집수를 저장한다. d[1]=1, d[2]=7, d[3]=19, d[4]=37, d[5]=61 규칙을 확인해보면 d[i]=d[i-1] + 6*(i-1) 인 것을 알 수 있다. d[6]을 구해보면 d[6] = d[5] + ..
https://www.acmicpc.net/problem/2231 2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net -문제해설 맨 처음에는 1부터 입력된 값까지 반복문으로 순회하면 분해합을 구했는데 범위를 축소시킬 수 있었다. 예를들어 입력된 값이 네 자리 정수 K라고하고 K의 생성자를 W라고 하면 K = W + W1 + W2 + W3 + W4 가 될 것이다. 이때 W의 각 자리수를 모두 좌변으로 넘기면 K - (W1 + W2 + W3 + W4) = W가 된다. 즉 K의 생성자인 W..