Algorithm(10)
-
최솟값 만들기 (프로그래머스) - C++
문제 배열 A, B가 주어질 때 최종적으로 누적된 최솟값을 return 하는 solution 함수를 완성해 주세요. 설명 길이가 같은 배열 A, B 두개가 있습니다. 각 배열은 자연수로 이루어져 있습니다. 배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱합니다. 이러한 과정을 배열의 길이만큼 반복하며, 두 수를 곱한 값을 누적하여 더합니다. (단, 각 배열에서 k번째 숫자를 뽑았다면 다음에 k번째 숫자는 다시 뽑을 수 없습니다.) 풀이 최솟값을 구하기 위해서는 가장 작은 값과 가장 큰 값을 곱해야 한다. 따라서 하나의 배열을 오름차순, 다른 하나를 내림차순으로 정렬 후 순서에 맞게 곱하여 더해준다. 12345678910111213141516171819202122232425262728#include..
2021.02.20 -
다음 큰 숫자 (프로그래머스) - C++
문제 자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요. 설명 자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다. 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다. 예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다. 풀이 처음에는 숫자를 이진수로 변환한 뒤에, 뒷자리(작은 수)부터 확인하면서 1 다음에 0 이 오면 오버플로우 시킨 후 , 그 전에 있던 1의 갯수만큼 뒷자리부터 채운 후에 오버플로우 된 자리 이전까지 0..
2021.02.20 -
9251 - LCS(Longest Common Subsequence)
문제 LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. 입력 첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다. 출력 첫째 줄에 입력으로 주어진 두 문자열의 LCS의 길이를 출력한다. 해설 LCS 문제는 DP로 풀수 있다. int dp[i][j] 를 첫번째 문자열의 i 번쨰와 두번째 문자열의 j번째의 LCS라고 하자 최종적으로 dp[max][max]의 값을 구하면 된다. (max는 각 문자열의 최대길이로 가정한다.) 두 문자열의 마지막 문자가..
2020.09.13 -
그대로 출력하기 - 11719
입력 입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄이 주어질 수도 있고, 각 줄의 앞 뒤에 공백이 있을 수도 있다. 출력 입력받은 그대로 출력한다. 심플한 문제이지만, 그 전에 문자열 문제들은 문자열은 입력받은 후 어떤 과정을 거쳐 다른 형태로 출력하는 방식이었는데, 그대로 출력하라고 하니까 적잖이 당황을 했다. string 라이브러리에 getline을 사용하여 공백을 포함한 string을 입력받아 출력만 하면 된다. 생각보다 단순했는데, getline을 모른다면, 쉽지 않았을 문제였다.
2020.09.13