CSP-J 재시험 경험담

T1 분배 문제

이 문제는 최대 나머지를 계산하는 간단한 알고리즘을 요구했습니다. 주어진 범위 내에서 최대값을 찾는 방식으로 접근했습니다.

#include <iostream>
using namespace std;

int main() {
    int total, start, end;
    cin >> total >> start >> end;
    int maxRemain = 0;
    for(int i = start; i <= end; ++i) {
        maxRemain = max(maxRemain, i % total);
    }
    cout << maxRemain << endl;
    return 0;
}

T2 삽입 정렬

삽입 정렬의 구현을 기반으로 한 문제였습니다. 하지만 시간 부족으로 후순위 문제를 먼저 해결했고, 이 문제는 부분적으로만 해결되었습니다.

#include <vector>
#include <algorithm>
using namespace std;

struct Data {
    int value;
    int index;
};

int main() {
    int size, queries;
    vector<Data> array;
    cin >> size >> queries;
    for(int i = 0; i < size; ++i) {
        Data d;
        cin >> d.value;
        d.index = i + 1;
        array.push_back(d);
    }
    // ... (추가 로직 생략)
    return 0;
}

T3 네트워크 연결

IP 주소 유효성 검증과 데이터 매칭을 요구하는 문제였습니다. 다양한 경계 조건을 처리하기 위해 복잡한 검증 로직을 구현했습니다.

#include <string>
#include <vector>
using namespace std;

bool validateIP(string ip) {
    vector<int> parts;
    // ... (검증 로직 생략)
    return isValid;
}

int main() {
    int count;
    cin >> count;
    vector<pair<string, int>> records;
    for(int i = 0; i < count; ++i) {
        string type, address;
        cin >> type >> address;
        // ... (처리 로직 생략)
    }
    return 0;
}

T4 과일 바구니

연속된 요소를 합치는 로직을 반복적으로 적용해야 했습니다. 효율적인 방법을 찾기 위해 여러 가지 접근법을 시도했습니다.

#include <vector>
#include <unordered_map>
using namespace std;

int main() {
    int n, m;
    vector<int> values;
    cin >> n;
    for(int i = 0; i < n; ++i) {
        values.push_back(i + 1);
    }
    // ... (처리 로직 생략)
    return 0;
}

요약

문제 해석 능력이 가장 중요했습니다. 모든 문제에 대한 기본적인 솔루션을 먼저 구현하고, 이후 최적화를 진행하는 전략이 효과적이었습니다. 총점은 100+52+65+70으로 예상됩니다.

태그: CSP-J 알고리즘 프로그래밍_경시 데이터구조

7월 8일 18:11에 게시됨