diff --git a/climbing-stairs/oyeong011.cpp b/climbing-stairs/oyeong011.cpp new file mode 100644 index 000000000..a65cf706f --- /dev/null +++ b/climbing-stairs/oyeong011.cpp @@ -0,0 +1,25 @@ +class Solution { +public: + int climbStairs(int n) { + if(n == 0 || n == 1){ + return 1; + } + vector dp(n + 1); + dp[0] = dp[1] = 1; + for(int i = 2; i <= n; i++){ + dp[i] = dp[i-1] + dp[i - 2]; + } + return dp[n]; + } +}; + +// dp 문제로 배열을 생성해준다 +// 계단 방식 +// 1 1개 +// 1 + 1, 2 2개 +// 1 + 1 + 1, 2 + 1, 1 + 2 3개 +// 1 + 1 + 1 + 1, 1 + 1 + 2, 1 + 2 + 1, 2 + 1 + 1, 2 + 2 ---> 5개 +// 즉 피보나찌 수열의 형태를 띈다 왜냐면 2칸을 뛰기 때문에 한칸전에 1을 더하고 두칸 전에 경우의 수에 2를 더해주면 되기때문 +// 즉 f(n) = f(n - 1) + f(n - 2) +// 만약 계단 방식이 3칸까지이면 즉 f(n) = f(n - 1) + f(n - 2) + f(n - 3) +// 시간복잡도는 n만큼 순회하여 O(n) diff --git a/valid-anagram/oyeong011.cpp b/valid-anagram/oyeong011.cpp new file mode 100644 index 000000000..64fca8a40 --- /dev/null +++ b/valid-anagram/oyeong011.cpp @@ -0,0 +1,15 @@ +class Solution { +public: + bool isAnagram(string s, string t) { + unordered_map ss, tt; + if(s.length() != t.length())return false; + for(auto i : s) ss[i]++; + for(auto i : t) tt[i]++; + return ss == tt; + } +}; + +// 문자열 비교 unordered_map은 해쉬 형태이므로 O(1) +// 각 문자 루프 O(n) +// 마지막 문자 비교 해시멥 알파벳은 26개 이므로 O(n) +// 따라서 O(n)