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으로 예상됩니다.