diff --git a/climbing-stairs/socow.py b/climbing-stairs/socow.py new file mode 100644 index 0000000000..f2d888da33 --- /dev/null +++ b/climbing-stairs/socow.py @@ -0,0 +1,18 @@ +# 문제내용 +# 한번에 1칸 또는 2칸을 오를수있음 정확히 n칸에 도달할수있는 방법수를 구하라 +# 계단 문제 = 피보나치 수열 + +class Solution: + def climbStairs(self, n: int) -> int: + # 1칸 또는 0칸 계단은 방법이 1가지뿐 + if n <= 1: + return 1 + + # dp[0] = 1, dp[1] = 1 + prev2, prev1 = 1, 1 # (n-2), (n-1) + + # n=2부터 n까지 반복 + for _ in range(2, n + 1): + curr = prev1 + prev2 # 현재 계단 방법 수 = 이전 두 계단의 합 + prev2, prev1 = prev1, curr # 한 칸씩 전진 + return prev1 diff --git a/valid-anagram/socow.py b/valid-anagram/socow.py new file mode 100644 index 0000000000..9302ac6d4f --- /dev/null +++ b/valid-anagram/socow.py @@ -0,0 +1,16 @@ +# 문제내용 +# 두 문자열 s와 t가 주어질 때, t가 s의 애너그램(anagram)인지 판별하라. +# 애너그램이란 같은 문자를 같은 개수만큼 사용해 순서만 바꾼 문자열을 말해. +# 결과: 애너그램이면 True, 아니면 False. + +# sorted(): 문자열을 한 글자씩 잘라 오름차순 정렬해서 비교 (간단, 직관) +# 1. sorted()로 두 문자열을 정렬해서 비교 +# 2. 정렬된 경과가 같으면 True 아니면 False +# 시간복잡도: O(n log n) +# 공간복잡도: O(n) + +class Solution: + def isAnagram(self, s: str, t: str) -> bool: + if len(s) != len(t): + return False + return sorted(s) == sorted(t)