Skip to content

Commit 432ad65

Browse files
authored
Merge pull request #2068 from leehyeyun/main
[leehyeyun] WEEK 02 solutions
2 parents 136fbff + 421deb4 commit 432ad65

File tree

2 files changed

+166
-0
lines changed

2 files changed

+166
-0
lines changed

climbing-stairs/leehyeyun.js

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/**
2+
* @param {number} n
3+
* @return {number}
4+
*/
5+
/*
6+
계단을 올라가고 있을 때,
7+
꼭대기에 도달하려면 총 n 계단을 올라가야 한다.
8+
9+
한 번에 오를 수 있는 계단 수는
10+
- 1계단
11+
- 2계단
12+
두 가지뿐이다.
13+
14+
이때, 정확히 n번째 계단(꼭대기)에 도달하는
15+
서로 다른 방법의 수를 반환하는 함수.
16+
17+
요청형식 : climbStairs(n)
18+
19+
입력형식 :
20+
- n은 정수
21+
- 1 <= n <= 45
22+
23+
출력형식 :
24+
- n번째 계단에 도달할 수 있는 서로 다른 방법의 수 (정수)
25+
26+
예시 :
27+
28+
Example 1
29+
입력 :
30+
n = 2
31+
출력 :
32+
2
33+
설명 :
34+
1) 1계단 + 1계단
35+
2) 2계단
36+
37+
Example 2
38+
입력 :
39+
n = 3
40+
출력 :
41+
3
42+
설명 :
43+
1) 1계단 + 1계단 + 1계단
44+
2) 1계단 + 2계단
45+
3) 2계단 + 1계단
46+
47+
제약사항 :
48+
- 1 <= n <= 45
49+
50+
참고 :
51+
- 각 계단에 도달하는 "방법의 수"를 잘 관찰하면
52+
일정한 규칙(수열)이 나타난다.
53+
*/
54+
var climbStairs = function(n) {
55+
56+
const map = new Map();
57+
58+
map.set(1,1);
59+
map.set(2,2)
60+
61+
for (var stairs = 3; stairs <= n; stairs ++)
62+
{
63+
var stairs_hap = map.get(stairs-1) + map.get(stairs-2)
64+
map.set(stairs,stairs_hap)
65+
}
66+
67+
var result = map.get(n);
68+
69+
return result;
70+
};
71+
72+
console.log(climbStairs(2)); //2
73+
console.log(climbStairs(3)); //3
74+

valid-anagram/leehyeyun.js

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
/**
2+
* @param {string} s
3+
* @param {string} t
4+
* @return {boolean}
5+
*/
6+
7+
/*
8+
두 문자열 s와 t가 주어졌을 때,
9+
t가 s의 애너그램(anagram)이면 true,
10+
아니면 false를 반환하는 함수.
11+
12+
애너그램이란?
13+
→ 문자열에 포함된 문자들의 종류와 개수가 모두 동일한 경우.
14+
(순서는 상관 없음)
15+
16+
요청형식 : isAnagram(s, t)
17+
18+
입력형식 :
19+
- s, t는 모두 소문자 알파벳으로 구성된 문자열
20+
- 1 <= s.length, t.length <= 5 * 10^4
21+
22+
출력형식 :
23+
- t가 s의 애너그램이면 true
24+
- 아니면 false
25+
26+
요청예시 :
27+
isAnagram("anagram", "nagaram")
28+
출력예시 :
29+
true
30+
31+
isAnagram("rat", "car")
32+
출력예시 :
33+
false
34+
35+
Follow-up :
36+
- 만약 유니코드 문자(한글, 일본어, 이모지 등)를 포함한다면
37+
문자 빈도수를 저장할 때 ASCII 배열 대신
38+
해시맵(Map, Object)을 사용하여 해결할 수 있다.
39+
*/
40+
41+
var isAnagram = function(s, t) {
42+
43+
const map = new Map();
44+
45+
//문자열 s를 순회하면서 각 요소를 map 방식으로 넣어줌
46+
for(const s_char of s){
47+
if(map.has(s_char))
48+
{
49+
var s_char_count = map.get(s_char)
50+
51+
s_char_count ++;
52+
53+
map.set(s_char,s_char_count)
54+
}else {
55+
map.set(s_char,1)
56+
}
57+
}
58+
59+
//문자열 t를 순회하면서 각 요소를 map에서 빼줌
60+
for(const t_char of t){
61+
if(map.has(t_char))
62+
{
63+
var t_char_count = map.get(t_char)
64+
65+
t_char_count --;
66+
67+
if(t_char_count === 0)
68+
{
69+
map.delete(t_char)
70+
}else if(t_char_count > 0)
71+
{
72+
map.set(t_char,t_char_count)
73+
}else {
74+
return false;
75+
}
76+
}else {
77+
return false;
78+
}
79+
}
80+
81+
//최종 리턴
82+
if(map.size == 0)
83+
{
84+
return true;
85+
}else {
86+
return false;
87+
}
88+
};
89+
90+
console.log("Example 1:", isAnagram("anagram", "nagaram")); // true
91+
console.log("Example 2:", isAnagram("rat", "car")); // false
92+

0 commit comments

Comments
 (0)