본문 바로가기

Study

[Level 3] 2. Palindrome 2. Palindrome Algorithm - Level 3 - 풀이 1. palindrome은 문자열을 뒤집어도 같은 문자열을 의미한다. 2. 문자열의 어떤 문자를 잡았을 때, 그 문자와 대칭하는 문자를 우선 찾는다. 3. 대칭 되는 문자들을 기준으로 그 사이에 존재하는 문자들을 비교한다.-> 이 때, 하나라도 매칭되지 않는다면 기준 문자들은 올바르지 않은 매칭이다. 4. 효율성 : for문을 사용하되 기존의 매칭된 문자열의 길이보다 남은 문자열이 작다면 더 찾아봐도 그 길이 이상이 나올 수 없다. 1234567891011121314151617181920212223242526272829#include #include using namespace std; int solution(string s){ int..
[Level 3] 1. 2xN 타일링 1. 2xN 타일링 Algorithm - Level 3 - 풀이 1, n이 커지면서 갖는 경우의 수를 살펴본다. - n=1 : 1- n=2 : 2- n=3 : 3- n=4 : 5- n=5 : 8- n=6 : 13..... 다음과 같이 n-1, n-2의 수의 덧셈이 n의 경우의 수를 생성하는 것을 볼 수 있다. 따라서, 이 또한 점화식을 이용하여 해결한다. 2, 단, 수가 커감에 따라, 자료형을 벗어날 수 있으며 문제에서 10000007로 나눈 나머지를 구하기로 하였으므로 덧셈 후 모듈러 연산이나, 최종값에 모듈러 연산이나 결과가 같기 때문에 덧셈 후 모듈러 연산을 한다.1234567891011121314151617181920#include #include #include using namespace st..
[Level 2] 12. N개의 최소공배수 12. N개의 최소공배수 Algorithm - Level 2 - 풀이 1. 최소공배수를 구하는 알고리즘은 최대 공약수를 이용한다.-> 유클리드 2. 최대 공약수는 a를 b로 나눠 떨어지면 b가 최대 공약수가 되며, 그렇지 않은 경우 b가 a가 되고 나머지 r이 b가 되어 다시 반복한다. 3. 최대공약수를 이용하여 최소 공배수를 구한다.-> a*b/(gcd(a,b) 4. N개의 최소공배수를 구하는 것은 한번에 N개를 연산하는 것과 2개씩 연산하여 구하는 결과가 같다.-> i번째와 i+1번째 원소를 연산하고 그 결과를 i+1에 저장-> 이를 반복하여 마지막 원소의 값은 N개의 최소공배수 값이 된다. 1234567891011121314151617181920212223242526272829303132#inclu..
[Level 2] 11. JadenCase 11. JadenCase Algorithm - Level 2 - 풀이 1. 공백 문자를 기준으로 첫 알파벳은 대문자. -> 공백을 이용 2. 숫자로 시작하면 무시. 3. 첫 알파벳을 제외하고는 나머진 소문자. 4. 위 조건을 모두 조건식으로 세워 해결하는 방법12345678910111213141516171819202122string solution(string s) { string answer = ""; int flag = 1; for(auto c: s){ char tmp = c; if(c==' '){ flag = 1; } else if(flag==1){ flag = 0; if(c>='a'&&c='A'&&c 숫자를 조건식으로 판별 x-> 첫 문자가 대문자 소문자 상관없이 대문자로, 나머진 대문자 소문자 ..
[Level 2] 10. 행렬의 곱셈 10. 행렬의 곱셈 Algorithm - Level 2 - 풀이 1. 단순하게 for문을 사용하여 접근한다. 2. arr1의 행과 arr2의 열이 연산의 대상-> 첫 번째 for문은 arr1의 행의 크기, 두 번째 for문은 arr2의 열의 크기만큼 접근 3. arr1 열과 arr2의 행은 같아야 연산이 가능-> 임의의 변수 하나로 두 열과 행을 접근 가능 4. 결과는 arr1의 행과 arr2의 열의 크기를 갖는 모양-> arr1 : AxM, arr2 : NxB => result : AxB 1234567891011121314151617181920#include #include using namespace std; vector solution(vector arr1, vector arr2) { vector ..
[Level 2] 9. 피보나치 수 9. 피보나치 수 Algorithm - Level 2 - 풀이 1. 피보나치 수도 이전의 수에 영향을 받는다. -> Dynamic programming 점화식 이용. 2. int형의 범위를 초과할 수 있다. && 2 이상의 수가 입력되면 1234567로 나눈 나머지를 구한다.-> modular 연산은 수들을 다 더한 후 나머지를 구하나, 먼저 나머지를 구한 후 덧셈한 것이 결과가 같다.1234567891011121314151617181920212223#include #include using namespace std; int solution(int n) { int answer = 0; int dp[n+1]; if(n==1) return 1; dp[0] = 0; dp[1] = 1; for(int i=2; i
[Level 2] 8. 최소값 만들기 8. 최소값 만들기 Algorithm - Level 2 - 풀이 1. 두 수의 곱들의 합이 최소값이 되기 위해서는 한 배열에서 최소값과 다른 배열에서 최대값을 곱하면 문제를 해결할 수 있다. 12345678910111213141516#include #include #include using namespace std; int solution(vector A, vector B){ int answer = 0; sort(A.begin(), A.end()); sort(B.rbegin(), B.rend()); for(int i=0; i
[Level 2] 7. 최대값과 최소값 7. 최대값과 최소값 Algorithm - Level 2 - 풀이 1. 공백을 기준으로 숫자들이 나눠져 있다. 2. 숫자들을 임시 string 변수에 저장하며, 이 변수에는 - 기호도 붙을 수 있다. 3. 공백을 만나면 임시 변수에 저장하였던 값을 int형으로 변환한다.-> stoi() 4. int형으로 변환한 것을 int형 배열에 저장하고 모든 수가 저장이 되었다면 정렬한다.-> sort() 5. 정렬이 끝나면 맨 처음은 최소, 맨 끝은 최대값으로 이를 다시 string형으로 변환하여 반환한다.1234567891011121314151617181920212223242526272829303132333435363738#include #include #include #include using namespace..