본문 바로가기
코테연습

132. 이것이 코딩 테스트다 : 11장 곱하기 혹은 더하기 Javascript

by hxunz 2022. 9. 14.

1. 문제에 대한 이해

  • 우리가 풀어야 할 문제는 무엇인가?
     - 숫자 사이에 x 혹은 + 연산자를 넣어 만들 수 있는 가장 큰 수를 구하라
  • 주어진 자료는 무엇인가?
     - s = 여러개의 숫자로 구성된 하나의 문자열 
     - x 혹은 + 연산자를 사용할 수 있다.

     - 곱셈보다 더했을때 값이 더 큰 경우가 있다. 
  • 조건은 무엇인가?
     - 만들어질 수 있는 가장 큰 수는 항상 20억 이하의 정수이다.

2. 계획

  1. 주어진 문자열을 쪼개면서 숫자로 바꾼다.
  2. 더했을때 값이 더 큰 경우 더한다.
  3. 곱했을때 값이 더 큰 경우 곱한다.

3. 실행

  • 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (s) => {
  // 주어진 문자열을 쪼개면서 숫자로 바꾼다.
  const numbers = s.split('').map((it) => Number(it));

  // 각 숫자를 순회하면서 곱한다
  // 더했을때 값이 더 큰 경우 더한다.
  // 곱했을때 값이 더 큰 경우 곱한다.
  const acc = numbers.reduce((acc, cur) => {
    const acc = numbers.reduce((acc, cur) => {
    if (acc + cur > acc * cur) {
      return acc + cur
    } else {
      return acc * cur
    }
  })

  return acc
}

test('countGroup', () => {
  expect(solution('02984')).toEqual(576);
  expect(solution('567')).toEqual(210);
});

4. 반성

  • 처음에는 숫자가 0일때만 곱셈보다 더한값이 더 크다고 생각하고 풀었는데 0뿐만이 아니라 덧셈이 곱셈보다 더 값이 큰 경우가 있었다. 그래서 덧셈이 곱셈한 값 보다 클 경우 더해줬고 그렇지 않은 경우에는 곱했다.

 

댓글