[백준] 25323 – 수 정렬하기,

쉬운 목차

문제

#25323: 숫자를 정렬하지만 이제 제곱수를 사용합니다(acmicpc.net).

#25323: 숫자를 정렬하지만 이제 제곱수를 사용합니다.

양의 정수로 구성된 길이 $N$의 시퀀스 $A_1,A_2,\cdots ,A_N$가 존재하는 경우 다음 작업을 여러 번 반복할 수 있습니다.
여기서 $i$ 및 $j$를 선택합니다.
여기서 $1\leq i,j\leq N;i\neq j$ 및 $A_i\times A_j$는 정사각형, $A_i$ 및 $A_j$는

www.acmicpc.net

설명

C++로 해결하려다 포기하고 결국 파이썬으로 정했습니다.

배열 A에 정렬된 배열 _A의 값을 곱하여 제곱근을 구하면 건너뛰고 그렇지 않으면 루프 문을 즉시 종료합니다.

C++로 했을 때 15%로 계속 “False”가 나왔지만 인터넷에서 해결책을 찾아본 결과 isqrt라는 고유한 Python 함수를 사용하는 것을 발견하여 시도해 보았습니다.

sqrt는 제곱근만 반환하고 isqrt는 가장 가까운 정수를 찾아서 반환합니다.

from sys import stdin
from math import isqrt
input = lambda : stdin.readline().strip()

N = int(input())
A = list(map(int,input().split()))

_A = A.copy()
A.sort()
flag = False

for i in range(N) :
    if int(isqrt(A(i) * _A(i))) ** 2 == A(i) * _A(i) :
        continue
    else :
        flag = True
        break
    
if flag :
    print("NO")
else :
    print("YES")