※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 22683번 문제인 Square Route 이다.
문제는 아래 링크를 확인하자.

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

 

네 도로로 둘러싸인 사각형이 정사각형을 이룬다는 것과 두 x축과 평행한 도로 사이의 거리 및 두 y축과 평행한 도로 사이의 거리가 서로 같다는 것은 필요충분조건임을 확인하자.

 

따라서 가능한 모든 x축과 평행한 도로 사이의 쌍에 대하여 가능한 거리별로 몇 개의 도로 쌍이 있는지를 먼저 구한 다음, 가능한 모든 y축과 평행한 도로 사이의 쌍에 대하여 두 도로 사이의 거리와 같은 거리를 갖는 x축과 평행한 도로 사이의 쌍의 개수를 더해나가 문제를 해결할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;

int N, M;
int A[1500], B[1500];
int cnt[1500001];
ll ans;

void solve() {
    memset(cnt, 0, sizeof(cnt));
    ans = 0;
    for (int i = 0; i < N; i++) cin >> A[i];
    for (int i = 0; i < N; i++) {
        int psum = 0;
        for (int j = i; j < N; j++) {
            psum += A[j];
            cnt[psum]++;
        }
    }
    for (int i = 0; i < M; i++) cin >> B[i];
    for (int i = 0; i < M; i++) {
        int psum = 0;
        for (int j = i; j < M; j++) {
            psum += B[j];
            ans += cnt[psum];
        }
    }
    cout << ans << '\n';
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> N >> M;
    while (N) {
        solve();
        cin >> N >> M;
    }
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 2187 // C++] 점 고르기  (0) 2024.06.21
[BOJ 3688 // C++] 래프팅 디자인  (0) 2024.06.20
[BOJ 25140 // C++] KLIZA  (0) 2024.06.18
[BOJ 20046 // C++] Road Reconstruction  (0) 2024.06.17
[BOJ 13270 // C++] 피보나치 치킨  (1) 2024.06.16

+ Recent posts