-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[정렬] 9월 8일 #1
base: main
Are you sure you want to change the base?
The head ref may contain hidden characters: "\uC815\uB82C"
[정렬] 9월 8일 #1
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
#include <iostream> | ||
#include <vector> | ||
#include <algorithm> | ||
|
||
using namespace std; | ||
|
||
struct point { //점 구조체 | ||
int x, y; | ||
}; | ||
|
||
bool cmp(const point &a, const point &b) { | ||
if (a.y == b.y) { //y좌표가 같으면 x좌표가 증가하는 순서 | ||
return a.x < b.x; | ||
} | ||
return a.y < b.y; //y좌표가 같지 않으면 y좌표가 증가하는 순서 | ||
} | ||
Comment on lines
+11
to
+16
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. p2. 비교 함수를 아주 잘 구현해주셨네요!! 해당 문제에서 지금의 코드는 완벽하지만, 나중에 비교 조건이 여러 개가 됐을 경우를 대비해서 비교 함수에서 조건은 |
||
|
||
int main() { | ||
int n; | ||
cin >> n; //점의 개수 | ||
vector<point> arr(n); | ||
for (int i = 0; i < n; i++) { //x좌표, y좌표 입력 | ||
cin >> arr[i].x >> arr[i].y; | ||
} | ||
//연산 | ||
sort(arr.begin(), arr.end(), cmp); | ||
|
||
//출력 | ||
for (int i = 0; i < n; i++) { | ||
cout << arr[i].x << ' ' << arr[i].y << '\n'; | ||
} | ||
return 0; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
#include <iostream> | ||
#include <vector> | ||
#include <algorithm> | ||
|
||
using namespace std; | ||
|
||
|
||
bool cmp(const string &a, const string &b) { | ||
int a_sum=0, b_sum=0; | ||
|
||
if (a.size() != b.size()){ //a와 b 길이가 다를 경우 | ||
return a.size() < b.size(); | ||
} | ||
|
||
//a와 b 길이가 같을 경우 | ||
|
||
//a의 모든 자리수의 합 구하기 | ||
for(int i=0; i<a.size(); i++){ | ||
if (a[i] - '0' <= 9 && a[i] - '0' >= 0){ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P3 : a[i]와 '0'의 차이를 따지기보다는, a[i]가 '0'과 '9' 사이에 있는지 확인해 주는 것도 좋을 것 같아요! 그리고 숫자인지 아닌지 확인할 때 '0', '9'와 직접적으로 비교하는 방법도 좋지만, isdigit()함수를 이용하는 방법도 있으니 샘플코드를 참고하시면 좋을것같아요~ |
||
a_sum += a[i] - '0'; | ||
} | ||
} | ||
|
||
//b의 모든 자리수의 합 구하기 | ||
for(int i=0; i<b.size(); i++){ | ||
if (b[i] - '0' <= 9 && b[i] - '0' >= 0){ | ||
b_sum += b[i] - '0'; | ||
} | ||
} | ||
Comment on lines
+17
to
+29
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P2 : 문자열의 모든 자리수의 합을 구하는 부분은 sum함수를 따로 만들어서 분리하는게 어떨까요? 지금은 cmp함수가 비교기능과 자리수의 합을 구하는 기능, 즉 두 가지 역할을 수행하고 있어요..! 각 함수의 역할은 1개씩으로 명확하게 해주시는 것을 권장합니다! |
||
|
||
|
||
//만약 1,2번 조건으로 비교할 수 없을 때(자리수의 합이 같을 때) | ||
if (a_sum==b_sum){ | ||
return a<b; | ||
} | ||
Comment on lines
+32
to
+35
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. P2 : 11651번 문제에서 수아님이 코멘트하신 대로, cmp함수에서 조건은 !=을 써주는 편이 좋아요. 그렇게 하려면, 두 번째 if문은 a와 b의 자리수의 합이 다른 경우를 다루는 것이 좋겠죠? |
||
|
||
return a_sum<b_sum; | ||
|
||
|
||
} | ||
|
||
int main() { | ||
int n; | ||
cin >> n; //기타의 개수 입력 | ||
|
||
vector<string> arr(n); | ||
|
||
for (int i=0; i<n; i++){ | ||
cin >> arr[i]; //시리얼 번호 입력 | ||
} | ||
|
||
//연산 | ||
sort(arr.begin(), arr.end(), cmp); | ||
|
||
//출력 | ||
for (int i = 0; i < n; i++) { | ||
cout << arr[i] << '\n'; | ||
} | ||
return 0; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p2. 구조체 선언을 해주셨네요!! 구조체도 너무 좋지만, 지금은 변수가 2개 뿐이니 이럴 때 더 간편하게 사용할 수 있는 것이 있습니다! c++의 pair 클래스에 대해 한 번 알아보시면 좋을 것 같아요~! 뿐만 아니라 해당 pair는 typedef로 미리 선언하고 사용하면 더 간편하게 쓸 수 있습니다!!
사실 코드에 정답은 없지만, 코테는 특히 빨리 코딩을 해야하고 그러다보니, 원소가 2개인 경우엔 pair 사용을 더 많이 하고 있어요!! 하지만 pair는 이름에서도 유추하실 수 있듯이 원소를 2개씩만 묶기 때문에, 원소가 3개 이상인 경우엔 구조체를 사용하여 묶어주는 것이 더 편하겠죠 😊 용도에 맞춰 더 좋은 걸 골라 사용하시면 될 것 같습니다!