개발자 톡
연습문제 톡
[HSAT 3회 정기 코딩 인증평가 기출] 교차로
[HSAT 3회 정기 코딩 인증평가 기출] 교차로 , 시간복잡도 질문
- 등록일
- 2023-05-14 19:43:54
- 조회수
- 624
- 작성자
- dltmdwo0508
#include
#include
#include
#include
using namespace std;
vectorv;
int cnt;
bool now[5];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
int N;
queue>a;
queue>b;
queue>c;
queue>d;
scanf("%d", &N);
vectorans(N);
ans.assign(N , -1);
int curr_time;
int min_time;
for (int i = 0; i < N; i++) {
int t;
char w;
scanf("%d %c", &t, &w);
// 순서 , 시간
if (w == 'A') {
a.push({ i,t });
}
else if (w == 'B') {
b.push({ i,t });
}
else if (w == 'C') {
c.push({ i,t });
}
else
d.push({ i,t });
if (i == 0)
min_time = t;
}
curr_time = min_time;
while (a.size() || b.size() || c.size() || d.size()) {
int a_time, b_time, c_time, d_time;
if (a.size()) {
a_time = a.front().second;
min_time = min(min_time, a_time);
if (curr_time >= a_time)
now[0] = 1;
}
if (b.size()) {
b_time = b.front().second;
min_time = min(min_time, b_time);
if (curr_time >= b_time)
now[1] = 1;
}
if (c.size()) {
c_time = c.front().second;
min_time = min(min_time, c_time);
if (curr_time >= c_time)
now[2] = 1;
}
if (d.size()) {
d_time = d.front().second;
min_time = min(min_time, d_time);
if (curr_time >= d_time)
now[3] = 1;
}
if (min_time > curr_time)
curr_time = min_time;
int idx;
bool a1, b1, c1, d1;
a1 = b1 = c1 = d1 = false;
if (now[0] == 1 && now[1] == 1 && now[2] == 1 && now[3] == 1)
break;
if (now[0] == 1 && now[3] == 0) {
idx = a.front().first;
a.pop();
ans[idx] = curr_time;
a1 = true;
}
if (now[1] == 1 && now[0] == 0) {
idx = b.front().first;
b.pop();
ans[idx] = curr_time;
b1 = true;
}
if (now[2] == 1 && now[1] == 0) {
idx = c.front().first;
c.pop();
ans[idx] = curr_time;
c1 = true;
}
if (now[3] == 1 && now[2] == 0) {
idx = d.front().first;
d.pop();
ans[idx] = curr_time;
d1 = true;
}
if (a1 == true) {
now[0] = 0;
}
if (b1 == true)
now[1] = 0;
if (c1 == true)
now[2] = 0;
if (d1 == true)
now[3] = 0;
curr_time++;
}
for (auto a : ans)
printf("%d\n", a);
return 0;
}
다음과 같이 풀이했는데 시간초과가 나옵니다.
이런 저런 방향으로 계속해서 줄여보려 했지만 여전히 시간초과가 나오네요
시간을 줄일수 있는 좋은 방법이 있을까요??
#[hsat_3회_정기_코딩_인증평가_기출]_교차로
#c++