2023. 5. 24. 02:38, 알고리즘/BOJ
처음에 boj 1931번 문제를 풀었을때, 나의 풀이를 첨부해보자면
#include <bits/stdc++.h>
using namespace std;
vector<pair<int,int>> v;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin>>n;
for(int i=0; i<n; i++){
int a, b;
cin>>a>>b;
v.push_back({b,a});
}
sort(v.begin(),v.end());
int cnt=1;
int now=v[0].first;
for(int i=1; i<n; i++){
if(now<=v[i].second) {
now=v[i].first;
cnt++;
}
}
cout<<cnt;
}
그리고 내가 접한 코드를 통해서 내 코드를 변경해보면,
#include <bits/stdc++.h>
using namespace std;
pair<int,int> s[100'005];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin>>n;
for(int i=0; i<n; i++){
cin>>s[i].second>>s[i].first;
}
sort(s,s+n);
int cnt=1;
int now=s[0].first;
for(int i=1; i<n; i++){
if(now<=s[i].second) {//처음에 = 을 빼먹어서 들렸다. 몇몇 문제에서 등호 관계를 같이 고려해주지 않아서 틀리고 있다. 대소관계를 비교해야 하는경우 등호를 포함해도 되는지 안되는지에 대해서 확실하게 고민해보고 문제를 해결하도록 하자.
now=s[i].first;
cnt++;
}
}
cout<<cnt;
}
이런 형태일때, 둘이 메모리 사용에서 차이가 발생한다. 그 차이에 대해서 알아보기 위해서 지피티에 검색을 해보면,
이런식의 답을 얻을 수 있다.
추가적으로 궁금한 부분에 대한 질문을 하였을때,
전체적으로 검색을 통해 알게된 내용들을 토대로 생각해보면, vector로 설정할때 동일한 개수로 변수를 잡더라도 vector 자체가 그러한 동적 배열을 만들어주기 위해 메모리를 추가적으로 더 사용하는것으로 보인다.
추가적인 궁금증으로,
지금까지 c++을 알고리즘 용으로 가볍게 공부해서, c#을 사용할때는 있었던 garbage collector에 대해서 검색해보았는데,
이런 답변을 얻을 수 있었다.
아무래도 내가 현재 사용하는 수준에서는 c++을 사용할때 new와 delete를 사용할 일이 없어서 생소한데, 일단은 알고리즘 문제해결 수준에서의 c++에 더욱 더 익숙해진뒤에 추가적으로 공부를 통해 알아보도록 하자.
'알고리즘 > BOJ' 카테고리의 다른 글
boj 11501번 문제를 통해 배우게되는, 이미 다 받아들인 값을 통해서는 역으로도 연산을 해나갈 수 있다는 점에 대하여. (0) | 2023.05.26 |
---|---|
c++ 지속적으로 tmp 값을 쌓아나가다가 나중에 판별식에 도달했을때 사용하는 방법 (boj 1541) (0) | 2023.05.25 |
boj 7795번 문제를 통해. 접하게된 풀이 방법에 대하여. (0) | 2023.05.22 |
boj 10825번 문제를 통해 배운 tuple의 활용. tuple은 3개의 원소에 대해서만 사용하는것이 아니다. (0) | 2023.05.21 |
boj 11656번 문제를 통해 접하게된 substr() 함수에 대해서. (0) | 2023.05.21 |
Comments, Trackbacks