diff --git a/climbing-stairs/river20s.java b/climbing-stairs/river20s.java new file mode 100644 index 000000000..6b4f31ba1 --- /dev/null +++ b/climbing-stairs/river20s.java @@ -0,0 +1,26 @@ +/* + * 풀이: n번째 계단에 도달하는 경우는 다음 두 가지로 나뉜다. + * 1. (n-1)번째 계단에서 한 계단 오르는 경우 + * 2. (n-2)번째 계단에서 두 계단 오르는 경우 + * 따라서, n개의 계단을 올라가는 방법의 경우의 수 F(n)은 + * F(n-1)과 F(n-2)의 합과 같다. + * 시간 복잡도: O(n) + * 공간 복잡도: O(1) + */ +class Solution { + public int climbStairs(int n) { + if(n == 1) return 1; + + int step1 = 1; + int step2 = 2; + + for (int i = 3; i <= n; i++) { + int temp = step1 + step2; + step1 = step2; + step2 = temp; + } + + return step2; + } +} + diff --git a/valid-anagram/river20s.java b/valid-anagram/river20s.java new file mode 100644 index 000000000..52da94e72 --- /dev/null +++ b/valid-anagram/river20s.java @@ -0,0 +1,31 @@ +import java.util.Arrays; +/* +풀이: +- 문자열 s와 t를 배열로 저장하고, 오름차순으로 문자를 정렬한다. +- 정렬된 두 배열이 동일하면 애너그램으로 판단한다. +시간 복잡도: +- O(n log n) +- 배열 정렬은 O(n log n)의 시간 복잡도를 갖는다. +공간 복잡도: +- O(n) +- 문자열을 배열로 변환하고 정렬할 때 O(n)의 공간 복잡도를 갖는다. + */ +class Solution { + public boolean isAnagram(String s, String t) { + // 두 문자열의 길이가 다르면 false + if (s.length() != t.length()) { + return false; + } + //문자열의 문자를 배열로 저장한다 + char[] sArray = s.toCharArray(); + char[] tArray = t.toCharArray(); + + // 각 배열의 문자를 오름차순으로 정렬한다 + Arrays.sort(sArray); + Arrays.sort(tArray); + + // 정렬한 두 배열을 비교한다. + return Arrays.equals(sArray, tArray); + } +} +