diff --git a/climbing-stairs/sora0319.java b/climbing-stairs/sora0319.java index f226e4bce..37f94b294 100644 --- a/climbing-stairs/sora0319.java +++ b/climbing-stairs/sora0319.java @@ -1,3 +1,25 @@ +// 공간 복잡도를 줄인 2번째 버전 +class Solution { + public int climbStairs(int n) { + int back = 1; + int front = 2; + int target = 0; + + if (n == 1) return back; + if (n == 2) return front; + + for(int i = 1; i < n-1; i++){ + target = front + back; + back = front; + front = target; + } + + return target; + } +} + + +// 초기 버전 class Solution { public int climbStairs(int n) { int[] stairs = new int[n+1]; @@ -12,3 +34,9 @@ public int climbStairs(int n) { } } +// 1 : 1 +// 2 : [1] + 1, 2 1+1 2 2개 +// 3 : [2-1] + 1, [2-2] + 1, [1] + 2 1+1+1 2+1 1+2 3개 +// 4 : [3-1] + 1, [3-2] + 1, [3-3] + 1 1+1+1+1 2+1+1 1+2+1 1+1+2 2+2 5개 +// 5 : 1+1+1+1+1 2+1+1+1 1+2+1+1 1+1+2+1 1+1+1+2 2+2+1 2+1+2 1+2+2 8개 + diff --git a/valid-anagram/sora0319.java b/valid-anagram/sora0319.java index c758956e3..d6dd56e12 100644 --- a/valid-anagram/sora0319.java +++ b/valid-anagram/sora0319.java @@ -1,3 +1,30 @@ +// Map을 사용한 버전 +class Solution { + public boolean isAnagram(String s, String t) { + if(s.length() != t.length()) return false; + + Map alphabet = new HashMap<>(); + + for(char c : s.toCharArray()){ + if(!alphabet.containsKey(c)){ + alphabet.put(c, 0); + } + alphabet.put(c, alphabet.get(c) + 1); + } + + for(char c : t.toCharArray()){ + if(!alphabet.containsKey(c)) return false; + if(alphabet.get(c) == 0) return false; + + alphabet.put(c, alphabet.get(c)-1); + } + + return true; + } +} + + +// 초기 버전 class Solution { public boolean isAnagram(String s, String t) { int[] character = new int[26]; @@ -17,4 +44,9 @@ public boolean isAnagram(String s, String t) { } } - +/* +Map, 배열 모두 평균시간복잡도는 O(1)이지만, +배열이 직접 접근 방식이고, Map은 Hash를 사용하여서 배열 보다는 시간이 더 걸린다 +배열 사용시 4ms +Map 사용 시 17ms +*/