본문 바로가기

알고리즘66

[자바스크립트/알고리즘] 스택 - 괄호 검사 괄호가 올바른 쌍이면 "YES", 그렇지 않으면 "NO"를 출력합니다. 예를 들어 ((()))()는 쌍이 올바르지만, ((())은 올바르지 않습니다. const check = (str) => { let stack = [], cnt = 0; for(let x of str){ if(x === '('){ stack.push(x); cnt++; } else { stack.pop(); cnt--; } } if(cnt) return 'NO'; return 'YES'; } 스택을 이용한 간단한 알고리즘이다. '(' 차례에는 stack에 push를 해주고 cnt를 증가시킨다. ')'의 경우에는 pop을 해주고 cnt를 감소시킨다. cnt가 0이 아닐경우에는 짝이 맞지않아서 스택에 '(' 또는 ')'가 한개 이상 있다는.. 2021. 5. 11.
[자바스크립트/알고리즘] Leetcode - 부분 배열의 최대합 [문제] 53. Maximum Subarray Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum. [예시] Input Output [-2,1,-3,4,-1,2,1,-5,4] 6 [1] 1 [5,4,-1,7,8] 23 [풀이] var maxSubArray = function(nums) { for(let i = 1; i < nums.length; i++){ nums[i] = Math.max(nums[i], nums[i]+nums[i-1]); } return Math.max(...nums) }; 반복문을 돌면서 nums.. 2021. 3. 13.
[자바스크립트/알고리즘] LeetCode - 회문 정수 [문제] 9. Palindrome Number Given an integer x, return true if x is palindrome integer. An integer is a palindrome when it reads the same backward as forward. For example, 121 is palindrome while 123 is not. [예시] Input Output 121 true -121 false 10 false -101 false [풀이] 프리코드캠프에서 풀었던 회문 문제와 거의 동일하다. [자바스크립트/알고리즘] 회문(Palindrome) 검사 문제 주어진 문자열이 회문이면 true를 반환, 아니면 false를 반환하다. 영숫자가 아닌 문자들(non-alphanum.. 2021. 3. 7.
[자바스크립트/알고리즘] LeetCode - 정렬된 두 리스트 합치기 [문제] 21. Merge Two Sorted Lists Merge two sorted linked lists and return it as a sorted list. The list should be made by splicing together the nodes of the first two lists. [예시] Input Output l1 = [1,2,4], l2 = [1,3,4] [1,1,2,3,4,4] l1 = [], l2 = [] [] l1 = [], l2 = [0] [0] [풀이] /** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * th.. 2021. 3. 7.
[자바스크립트/알고리즘] 휴대폰 번호 검증 (정규식) 문제 미국 휴대폰 번호가 유효하다면 true, 유효하지 않다면 false를 리턴하라 사용자는 유효한 미국 번호의 형식이 있는 한 원하는 방식으로 양식 필드를 작성할 수 있다. 국가 코드가 제공된 경우 국가 코드가 1인지 확인해야 한다. 다음은 미국 번호에 대한 유효한 형식의 예시이다. 555-555-5555 (555)555-5555 (555) 555-5555 555 555 5555 5555555555 1 555 555 5555 나의 풀이 function telephoneCheck(str) { let regex = /^(1\s?)?(\(\d{3}\)|\d{3})[\s\-]?\d{3}[\s\-]?\d{4}$/ return regex.test(str); } 정규식을 사용하여 풀었다. 사실 정규식말고 해결방법이.. 2021. 2. 4.
[자바스크립트/알고리즘] 회문(Palindrome) 검사 문제 주어진 문자열이 회문이면 true를 반환, 아니면 false를 반환하다. 영숫자가 아닌 문자들(non-alphanumeric characters)은 제거되어야 한다. 대소문자 구분도 없어야 한다. 나의 풀이 function palindrome(str) { let alphanumeric = /[a-z]|[0-9]/gi; str = str.match(alphanumeric); for(let i = 0; i < str.length; i++){ //소문자 변경 if(str[i].toUpperCase()) str[i] = str[i].toLowerCase(); } let cnt = 0; if(str.length % 2 === 1){ //str의 길이가 홀수일 때 for(let i = 0; i < str.le.. 2021. 2. 4.