diff --git a/climbing-stairs/sonshn.java b/climbing-stairs/sonshn.java new file mode 100644 index 0000000000..f4df8a8c45 --- /dev/null +++ b/climbing-stairs/sonshn.java @@ -0,0 +1,20 @@ +/** + * dp[i] = dp[i - 1] + dp[i - 2] + */ +class Solution { + public int climbStairs(int n) { + if (n <= 2) { + return n; + } + + int[] dp = new int[n + 1]; + dp[1] = 1; + dp[2] = 2; + + for (int i = 3; i <= n; i++) { + dp[i] = dp[i - 1] + dp[i - 2]; + } + + return dp[n]; + } +} diff --git a/number-of-1-bits/sonshn.java b/number-of-1-bits/sonshn.java new file mode 100644 index 0000000000..ee143ec9d4 --- /dev/null +++ b/number-of-1-bits/sonshn.java @@ -0,0 +1,19 @@ +/** + * hammingWeight + * 정수 n의 이진수 표현에서 1의 개수를 반환 + * + * 시간 복잡도: O(1) + * 공간 복잡도: O(1) + */ +public class sonshn { + public int hammingWeight(int n) { + int count = 0; + + while (n != 0) { + count += (n & 1); + n >>>= 1; + } + + return count; + } +} diff --git a/valid-anagram/sonshn.java b/valid-anagram/sonshn.java new file mode 100644 index 0000000000..5f9548cf62 --- /dev/null +++ b/valid-anagram/sonshn.java @@ -0,0 +1,19 @@ +import java.util.*; + +/** + * String to char array, sort, and compare + * + * 시간 복잡도: O(nlogn) + * 공간 복잡도: O(n) + */ +class Solution { + public boolean isAnagram(String s, String t) { + char[] sArray = s.toCharArray(); + char[] tArray = t.toCharArray(); + + Arrays.sort(sArray); + Arrays.sort(tArray); + + return Arrays.equals(sArray, tArray); + } +} diff --git a/valid-palindrome/sonshn.java b/valid-palindrome/sonshn.java new file mode 100644 index 0000000000..f4f98c96c2 --- /dev/null +++ b/valid-palindrome/sonshn.java @@ -0,0 +1,36 @@ +/** + * Palindrome 문자열인지 확인하는 문제 + * + * Java에서 제공하는 Character.isLetterOrDigit() 메서드를 사용하여 알파벳과 숫자인지 확인하고, + * Character.toLowerCase() 메서드를 사용하여 대소문자를 구분하지 않고 비교 + * + * 시간 복잡도: O(n) + * 공간 복잡도: O(1) + */ +class Solution { + public boolean isPalindrome(String s) { + int left = 0; + int right = s.length() - 1; + + while (left < right) { + + while (left < right && !Character.isLetterOrDigit(s.charAt(left))) { + left++; + } + + while (left < right && !Character.isLetterOrDigit(s.charAt(right))) { + right--; + } + + if (Character.toLowerCase(s.charAt(left)) + != Character.toLowerCase(s.charAt(right))) { + return false; + } + + left++; + right--; + } + + return true; + } +}