diff --git a/climbing-stairs/leehyeyun.js b/climbing-stairs/leehyeyun.js new file mode 100644 index 0000000000..7a439d3890 --- /dev/null +++ b/climbing-stairs/leehyeyun.js @@ -0,0 +1,74 @@ +/** + * @param {number} n + * @return {number} + */ +/* + 계단을 올라가고 있을 때, + 꼭대기에 도달하려면 총 n 계단을 올라가야 한다. + + 한 번에 오를 수 있는 계단 수는 + - 1계단 + - 2계단 + 두 가지뿐이다. + + 이때, 정확히 n번째 계단(꼭대기)에 도달하는 + 서로 다른 방법의 수를 반환하는 함수. + + 요청형식 : climbStairs(n) + + 입력형식 : + - n은 정수 + - 1 <= n <= 45 + + 출력형식 : + - n번째 계단에 도달할 수 있는 서로 다른 방법의 수 (정수) + + 예시 : + + Example 1 + 입력 : + n = 2 + 출력 : + 2 + 설명 : + 1) 1계단 + 1계단 + 2) 2계단 + + Example 2 + 입력 : + n = 3 + 출력 : + 3 + 설명 : + 1) 1계단 + 1계단 + 1계단 + 2) 1계단 + 2계단 + 3) 2계단 + 1계단 + + 제약사항 : + - 1 <= n <= 45 + + 참고 : + - 각 계단에 도달하는 "방법의 수"를 잘 관찰하면 + 일정한 규칙(수열)이 나타난다. +*/ +var climbStairs = function(n) { + + const map = new Map(); + + map.set(1,1); + map.set(2,2) + + for (var stairs = 3; stairs <= n; stairs ++) + { + var stairs_hap = map.get(stairs-1) + map.get(stairs-2) + map.set(stairs,stairs_hap) + } + + var result = map.get(n); + + return result; +}; + +console.log(climbStairs(2)); //2 +console.log(climbStairs(3)); //3 + diff --git a/valid-anagram/leehyeyun.js b/valid-anagram/leehyeyun.js new file mode 100644 index 0000000000..0ee5b19daa --- /dev/null +++ b/valid-anagram/leehyeyun.js @@ -0,0 +1,92 @@ +/** + * @param {string} s + * @param {string} t + * @return {boolean} + */ + +/* + 두 문자열 s와 t가 주어졌을 때, + t가 s의 애너그램(anagram)이면 true, + 아니면 false를 반환하는 함수. + + 애너그램이란? + → 문자열에 포함된 문자들의 종류와 개수가 모두 동일한 경우. + (순서는 상관 없음) + + 요청형식 : isAnagram(s, t) + + 입력형식 : + - s, t는 모두 소문자 알파벳으로 구성된 문자열 + - 1 <= s.length, t.length <= 5 * 10^4 + + 출력형식 : + - t가 s의 애너그램이면 true + - 아니면 false + + 요청예시 : + isAnagram("anagram", "nagaram") + 출력예시 : + true + + isAnagram("rat", "car") + 출력예시 : + false + + Follow-up : + - 만약 유니코드 문자(한글, 일본어, 이모지 등)를 포함한다면 + 문자 빈도수를 저장할 때 ASCII 배열 대신 + 해시맵(Map, Object)을 사용하여 해결할 수 있다. +*/ + +var isAnagram = function(s, t) { + + const map = new Map(); + + //문자열 s를 순회하면서 각 요소를 map 방식으로 넣어줌 + for(const s_char of s){ + if(map.has(s_char)) + { + var s_char_count = map.get(s_char) + + s_char_count ++; + + map.set(s_char,s_char_count) + }else { + map.set(s_char,1) + } + } + + //문자열 t를 순회하면서 각 요소를 map에서 빼줌 + for(const t_char of t){ + if(map.has(t_char)) + { + var t_char_count = map.get(t_char) + + t_char_count --; + + if(t_char_count === 0) + { + map.delete(t_char) + }else if(t_char_count > 0) + { + map.set(t_char,t_char_count) + }else { + return false; + } + }else { + return false; + } + } + + //최종 리턴 + if(map.size == 0) + { + return true; + }else { + return false; + } +}; + +console.log("Example 1:", isAnagram("anagram", "nagaram")); // true +console.log("Example 2:", isAnagram("rat", "car")); // false +