#INFO 난이도 : BRONZE2 알고리즘 유형 : 자료구조 문제 출처 : https://www.acmicpc.net/problem/10809 #SOLVE 알파벳의 위치를 저장할 alpha[26] 배열을 선언해 주고, fill_n 메서드로 모든 값을 -1로 초기화한다. int alpha[26]; fill_n(alpha ,26 ,-1); 문자열을 입력받은 뒤 문자열의 길이만큼 탐색하여 만약 해당 알파벳의 alpha 배열 값이 -1 이라면 ( -1이 아니면 처음 등장한 위치가 아니라는 뜻이니) 현제 인덱스 값을 alpha 배열에 초기화 시켜준다. for (int i = 0; i < str.length(); i++) { if (alpha[str[i] - 97] == -1) { alpha[str[i] - 97..
#INFO 난이도 : BRONZE2 알고리즘 유형 : 자료구조 문제 출처 : https://www.acmicpc.net/problem/10808 #SOLVE 알파벳의 개수를 저장할 alpha[26] 배열을 선언하고, 문자열을 입력받아 아스키코드를 이용해서 해당하는 알파벳의 개수를 1씩 추가시켜 주었다. 정말 간단한 문제라서 다른 좋은 방식으로 풀이할 수 있나 고민해 보았는데,,, 아직은 잘 모르겠다. 아스키코드에 대한 개념만 알고 있었다면 간단하게 풀이할 수 있는 문제였다. #CODE #include #include using namespace std; int alpha[26]; int main() { string str; cin >> str; for (int i = 0; i < str.length();..
#INFO 난이도 : SILVER2 알고리즘 유형 : DP(다이나믹 프로그래밍) 문제 출처 : https://www.acmicpc.net/problem/11053 #SOLVE 11053 "가장 긴 증가하는 부분 수열" 문제 풀이를 위해 2가지 배열을 선언했다. 1. ary[1001] - 수열의 원소를 저장할 배열이다. 2. dp[1001] - 각 원소로 끝나는 가장 긴 부분 수열을 저장할 배열이다. (예를 들어 dp[2] = 3 은 , 2번째 인덱스의 원소로 끝나는 가장 긴 부분 수열의 길이가 3 이라는 의미이다.) int ary[1001]; int dp[1001]; 다음으로 dp 배열의 모든 원소를 fill_n 메서드를 이용해 1로 초기화 한다. 왜냐하면 각 원소 그 자체로 하나의 부분 수열이기 때문이..
#INFO 난이도 : SILVER2 알고리즘 유형 : DP(다이나믹 프로그래밍) 문제출처 : https://www.acmicpc.net/problem/11722 #SOLVE 수열을 저장할 arr[1001] 배열과, 감소 부분 수열의 길이를 저장할 dp[1001] 배열을 선언한다. 예를들어 dp[3] = 4 의 의미는 3번째 인덱스 원소의 최대 감소 부분 수열 길이가 4 이다. 라는 뜻이다. 우선, 초기의 모든 인덱스의 증가 감소 부분 수열의 길이는 원소 그 자체인 "1" 이기에 dp 값을 모두 1로 초기화 시킨다. fill_n(dp, n + 1, 1); 다음으로 생각해야 할 조건이 2가지 있다. 첫 번째 조건은 현재 인덱스의 값 보다 비교할 인덱스의 값이 더 커야 된다는 것이다. (Arr[i] < Arr..
#INFO 난이도 : SILVER2 알고리즘 유형 : DP(다이나믹 프로그래밍) 문제출처 : https://www.acmicpc.net/problem/11055 #SOLVE 수열의 원소를 입력받아 저장할 a[1001] 과, 최댓값을 저장할 배열 dp[1001]를 선언한다. 여기서 dp[n] 은 n 으로 끝나는 합이 가장 큰 증가하는 부분 수열 이라는 의미이다. 우리가 원하는 위치의 인덱스의 dp값을 구하기 위해서는 0번 인덱스 부터 해당 인덱스 까지 반복문을 돌려서 비교를 해 주어야 한다. for (int i = 0 ; i > a[i]; } for (i..