삐까냥의 파도타기

3233. 정삼각형 분할 놀이 본문

코딩/SW Expert Academy

3233. 정삼각형 분할 놀이

금손형아 2018. 3. 14. 23:43

문제 출처 : https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWAe5G8afT0DFAUw&categoryId=AWAe5G8afT0DFAUw&categoryType=CODE


이렇게 쉬워도 되나 싶을 정도로


간단한 문제네요.



우선 수학을 아셔야 합니다.


B에서 주목해야 합니다.


B는 A의 약수이기 때문에 B로 나누어 주면


결국


(A / B) : 1의 형태가 됩니다.


그렇다면 (A / B)의 값에 따른 정삼각형 개수를 세주면 되는데,


정삼각형의 각 층은 1개, 3개, 5개... 로 증가합니다.


일반항은 2n -1 가 되죠?


시그마 (2n - 1)을 해주면


n의 2승이 나옵니다.


결국 우리가 구해야 하는 값은


(A / B)의 2승 입니다.


이해 되죠?


다만 int로 하면 오버플로우가 일어나서, long가 처리했습니다.


import java.util.Scanner;

public class Q3233 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int testCase = sc.nextInt();

for (int i = 1; i <= testCase; i++) {

int A = sc.nextInt();

int B = sc.nextInt();

long result = getResult(A, B);

System.out.println("#" + i + " " + result);

}

}

static long getResult(int A, int B) {

if (B != 1) {

A /= B;

}

return (long)A * (long)A;

}


'코딩 > SW Expert Academy' 카테고리의 다른 글

2817. 부분 수열의 합  (0) 2018.03.15
3131. 100만 이하의 모든 소수  (0) 2018.03.15
1865. 동철이의 일 분배  (0) 2018.03.13
3750. Digit sum  (0) 2018.03.12
1873. 상호의 배틀필드  (0) 2018.03.11