문제 (요약) 주어진 수열이 문제에서 정의한 순열인지 판단하라. 길이 N인 순열은 1부터 N까지의 자연수를 중복 없이 순서에 상관없이 모두 사용하여 만든 수열을 의미한다. 접근 입력된 수열을 검사하여 모두 1회씩 출현했는지 확인한다. 풀이 #include #include using namespace std; string fnSolve(vector &v, int N) { for (int i = 1; i > T; for (int t = 1; t > N; vector v(N+1); for (int i = 0; i > idx; v[idx] += 1; } cout
알고리즘 트레이닝/SW Expert Academy
문제 (요약) 주어진 입력에서 고른 두 수의 곱을 출력하라. 이 곱은 증가하는 연속숫자(예, 2, 23, 23456, 456 등)로 이루어져야 한다. 이 값이 여러 개인 경우 최댓값을 출력하고 조건에 맞도록 두 수를 고를 수 없을 경우 -1을 출력하라 접근 입력으로 10^3개 이하의 수열이 주어지므로 이들을 조합하여 곱을 구하면 10^6 개의 곱을 얻고 이들 값이 각각 조건을 만족하는지 확인하면 된다. 이는 충분히 작은 숫자이므로 전수조사(O(N^2))로 풀이할 수 있다. 풀이 #include #include #include FILE* stream; using namespace std; int T, N; int main(void) { cin >> T; for (int t = 1; t > N; vector..
문제(요약) 부분문자열의 갯수를 구하시오. (출처) 접근법 완전탐색구현 후, 시간초과 발생하여 Dynamic Programing (Memoization) 적용 풀이 #include #include using namespace std; string S; string sT = "SAMSUNG"; const int NUM = 1000000007; vector memo; int fnSolve(int IdxT, int IdxS) { if (sT.size() == IdxT) { return 1; } if (S.size() == IdxS) { return 0; } int Ret = memo[IdxT][IdxS]; if (Ret != -1) { return Ret; } if (sT[IdxT] == S[IdxS]) { ..
문제(요약) 8821. 적고 지우기 풀이 문자열에 홀수번 등장하는 숫자의 개수를 구합니다. 입력받는 숫자의 범위가 '0' ~ '9' 로 제한되므로 입력받을 때마다 개수를 증가시키고 이 값이 홀수인 경우를 답으로 산출합니다. 단, 문자열로 입력받게 되므로 이를 숫자형으로 변환할 필요가 있습니다. #include #include using namespace std; int main(int argc, char** argv) { int T; cin >> T; for (int i = 0; i > strNum; for (int j = 0; j < s..
문제(요약) 입력받은 10개의 숫자의 각 자리수를 더하여 그 중 최대값과 최소값을 화면에 출력하라. 풀이 각 자리의 숫자는 나머지 연산자를 통해 쉽게 구할 수 있습니다. #include #include using namespace std; FILE* stream; const int NUM_INPUT = 10; int main(void) { freopen_s(&stream, "sample_input.txt", "r", stdin); int T; cin >> T; for (int t = 1; t > n; int sum = 0; while (n > 0) { int dig = (n % 10); n /= 10; sum += dig; } if (sum > max) { max = sum; } if (sum < min..
#include #include using namespace std; FILE* stream; int N; #define MAX_N 1000 int input[MAX_N]; int fnSolve() { int Ret = 0; for (int i = 2; i > input[i]; } cout
문제 요약 주어진 입력 데이터에서 가장 많이 나온 값을 구하여라. (출현빈도가 동일한 경우 큰 값을 화면에 출력해라.) 풀이 #include #include using namespace std; FILE* stream; int T; int N; int Cnt[101]; int Input[1000]; int fnSolve(void) { int MaxNum = 0; int Ret = 0; for (int i = 0; i T; for (int t = 1; t > N; for (int i =..