28일 차입니다. 사실 29일 차에 부랴부랴 이 글을 적고 있어요 ㅋㅋ 어제 알바 다녀오고 너무 피곤해서 뻗어버렸거든요.
매일매일 꾸준하게 해야하는 건데 또 실패해 버렸네요. 오늘부터라도 다시 열심히 해보겠습니다.
문제 설명
사이즈가 n인 score 배열이 주어지고 이것들의 크기를 비교해서 메달의 색깔을 새로 입력한 배열을 출력해 주면 되는 문제였습니다.
https://leetcode.com/problems/relative-ranks/
생각 흐름
이 문제의 키포인트는 각 점수와 인덱스를 포함한 벡터를 선언해서 대소를 비교하고 인덱스를 바탕으로 새로운 문자열을 넣는 것이라고 생각했습니다.
그래서 저는 우선 pair vector를 선언해주기로 했죠.
이름은 arr로 하고 score 배열에 있는 요소들을 arr에 index와 함께 넣어주었습니다.
넣고 보니 이를 내림차순으로 정리를 해야한다는 생각에 sort() 함수를 생각했는데 sort() 함수는 기본적으로 오름차순 정렬이므로 사용자 정의 함수를 따로 정의를 해줘야겠다는 생각을 했어요.
그래서 compare 라는 함수를 따로 선언해 주어서 내림차순으로 key를 기준으로 sort()해주었습니다.
여기서 생각을 잘해야 했었는데, 가장 큰 점수를 받은 요소에 각각 "메달"이라는 문자를 입력해줘야 했어요.
음.. 고민을 계속 해봤는데 도저히 머리에 생각이 꼬이고 꼬여서 뭐가 안 더더라고요.
그래서 결국 또 다른 사람의 코드를 참고했습니다. 초반까지는 비슷하게 갔더라고요.
문자열을 저장해 주기 위해 따로 vector <string> ans;라는 최종 답을 저장할 벡터를 선언하고 n만큼 반복문을 돌리고 0일 땐 ans [arr [0]. second] = 메달 이런 식으로 일일이 저장을 해주었습니다.
이게 은근히 헷갈려요. 그래서 따로 앞에 변수명을 정해주어서 가독성을 조금 높이는 방식으로 푸셨길래 따라 해보았습니다.
머리 아파라~~~
이렇게 마무리를 했는데 이상한 오류가 뜨더라고요. compare 앞에 static 뭐라나 그래서 static에 대해서 공부를 해봐야겠다 생각을 하며 붙이고 마무리하였습니다.
class Solution {
public:
static bool compare (pair<int,int> &a, pair<int,int> &b) {
return a.first > b.first;
}
vector<string> findRelativeRanks(vector<int>& score) {
vector<pair<int,int>> arr;
int n = score.size();
for(int i = 0 ; i < n ; i++)
{
arr.push_back({score[i] , i});
}
sort(arr.begin() , arr.end(), compare);
vector<string> ans(n);
for(int i = 0 ; i < n ; i++)
{
auto it = arr[i];
int num = it.first;
int index = it.second;
if(i == 0)
{
ans[index] = "Gold Medal";
}
else if(i == 1)
{
ans[index] = "Silver Medal";
}
else if(i == 2)
{
ans[index] = "Bronze Medal";
}
else
{
ans[index] = to_string(i+1);
}
}
return ans;
}
};
공부한 내용 정리
오늘은 static에 대해 공부해 볼 건데 따로 알고리즘 공부식으로 진행해 보려고요.
'코테 > 항해99' 카테고리의 다른 글
[99클럽 코테 스터디 30일차 TIL] #정렬5 (1) | 2024.11.26 |
---|---|
[99클럽 코테 스터디 29일차 TIL] #정렬4 (5) | 2024.11.25 |
[99클럽 코테 스터디 27일차 TIL] #정렬2 (2) | 2024.11.23 |
[99클럽 코테 스터디 26일차 TIL] #정렬1 (1) | 2024.11.23 |
[99클럽 코테 스터디 25일차 TIL] #힙7 (0) | 2024.11.22 |