[Toy Problem] inequalityNumber

황순은·2021년 11월 6일
1

Algorithm

목록 보기
16/16
post-thumbnail

문제 설명

아래와 같은 과정을 거쳐 부등호 수(inequalityNumber)를 만들 수 있습니다.

  • 최대 9개의 부등호(<, >)가 주어집니다.
  • 부등호의 좌우에는 0부터 9사이의 숫자가 한 번씩만 들어가야 합니다.
  • 부등호를 만족하는 숫자의 조합을 차례대로 이어 붙여 만든 정수를 부등호 수라고 한다.

부등호 기호들을 입력받아 부등호를 만족하는 최대 부등호 수와 최소 부등호 수의 차이를 리턴해야 합니다.

입력

인자 1 : signs

  • string 타입의 공백을 사이에 둔 부등호 기호들
  • signs.length는 17 이하 (최대 9개의 부등호 기호)

출력

  • number 타입을 리턴해야 합니다.

주의사항

  • 첫 자리가 0인 경우도 부등호 수에 포함되어야 합니다.
  • 모든 입력에 답은 항상 존재합니다.

입출력 예시

let output = inequalityNumber('<');
console.log(output); // --> 88 (89 - 01)

output = inequalityNumber('< >');
console.log(output); // --> 876 (897 - 021)

output = inequalityNumber('> < >');
console.log(output); // --> 8,754 (9,786 - 1,032)

Solution

  1. 숫자는 0-9까지 총 10개의 숫자를 사용해서 등호에 맞는 가장 큰 숫자, 작은 숫자를 만들어야 하기때문에 number의 테이블을 만들어준다.
  2. 가장 큰 숫자, 작은 숫자를 만드는 모듈을 만든다
    2-1. 탐색을하며 뒷 숫자보다 뒤에 계속 올 숫자보다 크거나(큰 숫자 모듈), 작아야(작은 숫자 모듈)등호가 성립하는 경우를 고려해준다. (같은 등호가 연속될 경우)
  3. 등호가 성립하는 큰 숫자애 작은 숫자를 뺀 값을 리턴.
const getMaxNumber = (signs, numTable) => {
  let max = '';
  for (let i = 0; i < signs.length; i++) {
    if (signs[i] === '>') {
      max += String(numTable.pop())
    } else {
      let count = 1;
      for (let j = i + 1; j < signs.length; j++) {
        if (signs[j] === '<') count++
        else break
      }
      max += String(numTable.splice(numTable.length - 1 - count, 1))
    }
  }
  max += numTable.pop()
  return max
}

const getMinNumber = (signs, numTable) => {
  let min = '';
  for (let i = 0; i < signs.length; i++) {
    if (signs[i] === '<') {
      min += String(numTable.shift())
    } else {
      let count = 1;
      for (let j = i + 1; j < signs.length; j++) {
        if (signs[j] === '>') count++
        else break
      }
      min += String(numTable.splice(count, 1))
    }
  }
  min += numTable.shift()
  return min
}

const inequalityNumber = function (signs) {
  signs = signs.split(' ')
  let number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  const answer = getMaxNumber(signs, number.slice()) - getMinNumber(signs, number.slice())
  return answer
}

GItHub repo

profile
안녕하세요.

0개의 댓글