N

(SWEA c++)1493. 수의 새로운 연산 본문

SW Expert Academy

(SWEA c++)1493. 수의 새로운 연산

naeunchan 2020. 10. 19. 10:34
728x90
반응형

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV2b-QGqADMBBASw&categoryId=AV2b-QGqADMBBASw&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

약간의 수학적 센스가 있으면 쉽게 풀 수 있는 문제.

배열의 크기를 [301][301]로 하여 세그먼트 폴트가 나지 않도록 적절히 조절하였다.

배열의 가로측으로는 i + j - 1씩 계속 증가한다.

배열의 세로측도 1, 2, 3, 4...씩 증가하기 때문에 num 계속해서 i를 더해주면 해당 값을 얻을 수 있다.

#include <iostream>

using namespace std;
int arr[301][301];

int main(void)
{
    int num = 1;
    
    for(int i = 1; i <= 300; i++)
    {
        arr[i][1] = num;
        for(int j = 2; j <= 300; j++)
            arr[i][j] = arr[i][j - 1] + i + j - 1;
        num += i;
    }
    cin >> num;
    
    for(int i = 1; i <= num; i++)
    {
        int p, q, x, y, a, b;
        
        cin >> a >> b;
        
        for(int j = 1; j <= 300; j++)
        {
            for(int k = 1; k <= 300; k++)
            {
                if(arr[j][k] == a)
                {
                    p = j;
                    q = k;
                }
                if(arr[j][k] == b)
                {
                    x = j;
                    y = k;
                }
            }
        }
        p += x;
        q += y;
        cout << "#" << i << " " << arr[p][q] << endl;
    }
    return 0;
}
728x90
반응형