© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 1356 - 유진수

2024-04-20
BOJ
브론즈 I
javascript
원본 문제 보기
수학
구현
브루트포스

문제

BOJ 1356 - 유진수

주어진 숫자를 두 부분으로 나누었을 때, 각 부분의 자릿수 곱이 같으면 유진수이다. 유진수인지 판별하라.

입력

첫째 줄에 수가 주어진다.

출력

유진수이면 "YES", 아니면 "NO"를 출력한다.

예제

입력출력
1236YES

풀이

모든 분할 위치에서 왼쪽과 오른쪽 자릿수의 곱을 비교한다.

  1. 숫자를 자릿수 배열로 변환한다
  2. 위치 1부터 길이-1까지 분할하여 왼쪽과 오른쪽으로 나눈다
  3. 각 부분의 자릿수 곱을 계산하여 일치하면 "YES"를 반환한다

핵심 아이디어: 자릿수가 최대 10자리 이하이므로 모든 분할을 확인해도 O(N²)으로 충분하다.

코드

const solution = (input) => {
  const str = input[0].split("").map(Number);
  for (let i = 1; i < str.length; i++) {
    const front = str.slice(0, i).reduce((acc, cur) => acc * cur, 1),
      back = str.slice(i).reduce((acc, cur) => acc * cur, 1);
    if (front === back) return "YES";
  }
  return "NO";
};
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
console.log(solution(input));

복잡도

  • 시간: O(N²)
  • 공간: O(N)