File tree Expand file tree Collapse file tree 2 files changed +80
-0
lines changed Expand file tree Collapse file tree 2 files changed +80
-0
lines changed Original file line number Diff line number Diff line change 1+
2+ // NOTE: 백준 N과 M문제와 거의 동일한 문제
3+ // memo(n) = memo(n-1)의 경우에 수에서 1칸을 올라가는 경우 + memo(n-2) 의 경우의 수에서 2 칸을 올라가는 경우의 점화식으로 표현됨.
4+
5+
6+ // 시간 복잡도: O(n)
7+ class Solution {
8+ public int climbStairs (int n ) {
9+ int [] memo = new int [n + 1 ];
10+
11+
12+ if (n < 3 ) {
13+ return n ;
14+ }
15+
16+ memo [1 ] = 1 ;
17+ memo [2 ] = 2 ;
18+ for (int i = 3 ; i < memo .length ; i ++) {
19+ memo [i ] = memo [i - 1 ] + memo [i - 2 ];
20+ }
21+
22+ return memo [n ];
23+ }
24+ }
Original file line number Diff line number Diff line change 1+ import java .util .HashMap ;
2+ import java .util .Map ;
3+
4+
5+ // NOTE: anagram 자체를 정확하게 이해하지 못해서 몇 번 틀렸던 문제.
6+ // 두 문자열의 길이가 다르면 anagram이 아니다.
7+ // 같은 알파뱃이 같은 개수가 있는지 확인을 하는게 문제의 핵심.
8+
9+ // NOTE: 시간복잡도: O(n+m)
10+ class Solution {
11+ public boolean isAnagram (String s , String t ) {
12+ Map <Character , Integer > sMap = new HashMap <>();
13+ Map <Character , Integer > tMap = new HashMap <>();
14+
15+ int tLen = t .toCharArray ().length ;
16+ int sLen = s .toCharArray ().length ;
17+
18+ if (tLen != sLen ) {
19+ return false ;
20+ }
21+
22+ for (char c : s .toCharArray ()) {
23+ if (sMap .containsKey (c )) {
24+ int cnt = sMap .get (c );
25+ sMap .put (c , cnt + 1 );
26+ } else {
27+ sMap .put (c , 1 );
28+ }
29+ }
30+
31+ for (char c : t .toCharArray ()) {
32+ if (tMap .containsKey (c )) {
33+ int cnt = tMap .get (c );
34+ tMap .put (c , cnt + 1 );
35+ } else {
36+ tMap .put (c , 1 );
37+ }
38+ }
39+
40+
41+ for (Character c : sMap .keySet ()) {
42+ if (!tMap .containsKey (c )) {
43+ return false ;
44+ }
45+
46+ int sMapCnt = sMap .get (c );
47+ int tMapCnt = tMap .get (c );
48+
49+ if (sMapCnt != tMapCnt ) {
50+ return false ;
51+ }
52+ }
53+
54+ return true ;
55+ }
56+ }
You can’t perform that action at this time.
0 commit comments