개발/자료구조, 알고리즘

[코딩 테스트] 소프티어(Softeer) 연습 문제 - GBC

growing-dev 2023. 2. 13. 23:20
반응형

코딩 테스트를 위한 소프티어(Softeer) 연습 문제 중 GBC 문제를 풀어보고 리뷰해본다.

 

연습 문제 - GBC

  • 난이도 : level 2
  • 정답률 : 42%

 

https://softeer.ai/practice/info.do?idx=1&eid=584 

 

Softeer

연습문제를 담을 Set을 선택해주세요. 취소 확인

softeer.ai

 

문제 해설

글로벌 비즈니스 센터(GBC, Global Business Center)는 현대자동차그룹 통합 사옥이다.

지하 7층, 지상 105층, 높이 약 570m의 규모로 2026년 하반기에 완공을 목표로 현재 공사 중에 있다.

주어진 구간의 제한 속도와 테스트한 구간 속도를 비교해서 가장 크게 제한 속도를 넘어간 값이 얼마인지 구하는 문제이다.

N개의 구간과 제한 속도가 주어지고, M개의 구간과 실제 테스트 속도가 주어진다. 나는 queue를 활용해서 주어진 N개의 구간과 제한 속도를 저장한 다음, 이후 주어지는 M개의 테스트 구간과 테스트 속도 또한 queue로 저자하였다. 이후 N개의 구간을 pop 하면서 M개의 테스트 구간과 조건을 비교해 가면서 가장 큰 속도의 차이를 저장하도록 구현하였다. N과 M은모두 100정도여서 N*M 혹은 N^2, M^2 이 되어도 크게 최적화 문제없는 간단한 문제였다.

 

제약조건

1≤ N, M ≤100

 

입력

3 3
50 50
40 40
10 30
60 76
18 28
22 50

 

출력

36
 

위 예제에서 주어진 50, 40, 10 구간에 대해서 60, 18, 22 구간을 테스트 한 다음 가장 속도 차이가 나는 구간을 판별한다. 위 경우에는 최초 테스트 구간 60m 76m/s에서 두 번째 구간의 제한 속도인 40m/s에서의 차이가 가장 많이 나므로 76 - 40 = 36 m/s 가 가장 차이가 나는 구간이므로 정답이 된다.

 

코드

#include<iostream>
#include<queue>

using namespace std;

#define MAX_N 100
#define MAX_M 100

struct Node {
	int len, speed;
	Node(int l, int s) {
		len = l, speed = s;
	}
};

int diff(int b, int t) {
	if (b >= t) return 0;
	if (b < t) return t - b;
}

int main(int argc, char** argv)
{
	int N, M;
	queue<Node> base_q;
	queue<Node> test_q;
    
	cin >> N >> M;
    
	for (int i = 0; i < N; i++) {
		int l, s;
		cin >> l >> s;
		base_q.push(Node(l,s));
	}
    
	for (int i = 0; i < M; i++) {
		int l, s;
		cin >> l >> s;
		test_q.push(Node(l, s));
	}
    
	int result = 0;
    
	while (!base_q.empty()) {
		Node *b = &base_q.front();
		Node *t = &test_q.front();
        
		if (b->len < t->len) {
			t->len -= b->len;
			base_q.pop();
		}
		else if (b->len > t->len) {
			b->len -= t->len;
			test_q.pop();
		}
		else {
			base_q.pop();
			test_q.pop();
		}
        
		int d = diff(b->speed, t->speed);
		if (result < d) result = d;
        
	}

	cout << result;

	return 0;
}

 

결론

쉽게 생각하면 쉽지만 어렵게 생각하다보면 구현이 복잡해지는 문제이다. 내 경우에도 생각보다는 다소 복잡한 조건을 검사하는 식으로 코드가 생각보다 길어지게 되었다.  queue를 사용하지 않더라도 효율적이고 간결한 코드를 좀 더 고민해 보아야 할 것 같다.

반응형