코딩연습

[백준 알고리즘] Node.js 1402. 아무래도이문제는A번난이도인것같다

니 뽀 2023. 8. 7. 13:15

1. 문제

https://www.acmicpc.net/problem/1402

 

1402번: 아무래도이문제는A번난이도인것같다

첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 100)이 주어진다. 테스트 케이스마다 두 정수 A, B(-231 ≤ A, B ≤ 231-1)가 주어진다.

www.acmicpc.net

 

2. 풀이

  • A의 경우 a1 * a2 * a3 ... * an = A가 된다고 했고, A'의 경우 a1 + a2 + a3 + ... + an = A' 이 된다고 했다.
  • 처음에는 A의 약수를 구해서 더했을 때 A'값이 된다면 yes, 아니면 no라고 문제를 이해했었다. 하지만 A와 A'이 음수일 경우도 있고, 범위가 엄청 넓어서 이 방법은 아니라고 생각했다.
  • 몇분 생각해보니
    • A = A * 1, A' = A + 1
    • A = A * 1 * 1, A ' = A + 2
    • A = A * -1 * -1 * 1, A' = A - 1 - 1 + 1 = A - 1
  • 결국 A'은 A보다 큰 모든 수는 다 가능하며, 작은 수 또한 모두 가능하다.
  • 예를 들면,
    • A = 6, A' = 5 일 때, 6 = 6 * -1 * -1 * 1, 5 = 6 - 1
    • A = 4, A' = 5 일 때, 4 = 4 * 1, 5 = 4 + 1
  • 과 같은 방식으로 1과 -1을 사용한다면 A를 A'으로 변할 수 있게 만들 수 있다는 의미였다.
  • 처음에는 테스트 케이스가 있다는 사실을 잊어버리고 console.log("yes") 로 제출해서 오답이 나왔었다.
const inputs = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const T = +inputs.shift();

for(let i = 0; i < T; i++){
    console.log('yes');
}