-
https://swexpertacademy.com/main/solvingProblem/solvingProblem.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
- n을 i로 나누었을 때 나머지가 0이 되는 값을 차례로 구한뒤 i값과 몫을 arr배열에 저장한다.
- (1,1)에서 시작하기 때문에 2를 빼주고 두 값을 더한다.
- 더한 값중 가장 작은 값을 출력한다.
1234567891011121314151617181920import mathT = int(input())for test_case in range(1, T + 1):n = int(input())arr = []arr2 = []for i in range(1, int(math.sqrt(n)) + 1):if n % i == 0:arr.append(i)arr.append(n // i)j = 0while len(arr)>j:a = arr[j] + arr[j + 1]-2arr2.append(a)j+=2print("#{} {}".format(test_case, min(arr2)))cs
📌 n이 주어졌을 때 어떤 두 수를 곱해야 n이 나오는 지 그 과정을 풀어내기 힘들었다.
for i in range(1, n): if n % i == 0: arr.append(i) arr.append(n // i)
시간 초과가 발생하였다.
▪ 루트를 사용한다. n이 주어졌을 때 두 수의 가장 큰 수는 루트n * 루트n이기 때문이다.
for i in range(1, int(math.sqrt(n)) + 1): if n % i == 0: arr.append(i) arr.append(n // i)
시간 초과가 발생하지 않고 해결할 수 있었다.
'CT > SWEA' 카테고리의 다른 글
[SWEA][D3][Python] 14361. 숫자가 같은 배수 (1) 2023.07.01 [SWEA][D3][Python] 14555. 공과 잡초 (0) 2023.07.01 [SWEA][D3][Python] 17319. 문자열문자열 (0) 2023.06.30 [SWEA][D2][Python] 2005. 파스칼의 삼각형 (0) 2023.06.14 [SWEA][D2][Python] 2007. 패턴 마디의 길이 (0) 2023.06.14 댓글