TIL.33 js 코드카타 4.

Haiin·2020년 12월 9일
0

위코드 자바스크립트 코드카타 4.



문제

문제
숫자로 이루어진 배열인 nums를 인자로 전달합니다.
숫자중에서 과반수(majority, more than a half)가 넘은 숫자를 반환해주세요.
예를 들어,
nums = [3,2,3]
return 3
nums = [2,2,1,1,1,2,2]
return 2
!가정
nums 배열의 길이는 무조건 2개 이상



풀이

  • 처음의 접근은 괄호들은 서로의 짝이 있기 때문에 object를 만들어서 key-value의 짝으로 접근하면 용이하겠다. 라고 생각하는 것부터 였다. 그리고 처음의 세쌍만 만들어주고 if문을 돌리니 반대의 경우에는 서로의 짝을 찾지 못하는 경우가 생겨나서 반대의 경우도 더해주었다.
  • 배열을 만들어주고 첫번째 인덱스와 마지막 인덱스를 비교해주기 위한 첫번째 if문을 만들어 주고, 이것의 짝이 맞으면 다른 인덱스들도 비교하는 이중 if 문을 만들어 주었다.
  • 문자가 하나인 경우는 무조건 false 이기 때문에 맨 앞에 더해주었다.
function isValid(s) {
    const obj = {
    "[" : "]",
    "(" : ")",
    "{" : "}",
    "]" : "[",
    ")" : "(",
    "}" : "{"
  }
  const str = s.split('')
  if ( str.length > 1) {
    for (i=0; i < str.length; i ++) {
        if(str[i] === obj[str[str.length-1]]) {
          if(str[i+1] === obj[str[i]]) {
            return true
          }
        return false
      }
    }
  }
    return false
}
isValid('([)]')
//false


다른풀이

function isValid(s) {
  let matching = {
      '(': ')',
      '[': ']',
      '{': '}'
  };
  let closeArr = [];
  let openArr = [];
  let sArr = s.split('');
  let result = true;
  for (let i = 0; i < sArr.length; i++) {
      let thisStr = sArr[i];
      let closeForOpen = matching[thisStr];
      if (closeForOpen) {
        openArr.push(thisStr);
        closeArr.unshift(closeForOpen);
      } 
      else {
        if (thisStr === closeArr[0]) {
          closeArr.shift();
          openArr.pop();
        } else {
          result = false;
          break;
        }
      }
  } 
  return result && closeArr.length === 0;
}


0개의 댓글