개발자의 길/Algorithm

[Algorithm] 해커랭크 - Sorting: Comparator

토아드 2018. 3. 26. 19:05
반응형

https://www.hackerrank.com/challenges/ctci-comparator-sorting/problem


주어진 구조체 player를 정렬하되, 첫번째로 멤버변수 score를 내림차순으로 정렬하고 만약 score가 같으면 멤버변수 name을 사전순으로 정렬하도록 하는 함수를 만드는 것이다.


간단하게 두 변수를 비교하는 compareBySN(p1, p2) 함수를 만들어 첫번째 파라미터가 더 앞에 오는 조건이면 true, 아니면 false를 반환하게 구현한 다음 STL algorithm 안에 내장되어 있는 sort를 사용하면 된다.


algorithm::sort 함수의 사용방법은 다음과 같다.


sort(배열의 첫 주소, 배열의 마지막 주소, 비교에 사용할 함수이름)


그리고 string::compare 함수는 호출한 멤버가 사전순으로 앞이면 음수, 같으면 0, 인자로 받은 string이 더 앞에 오는 조건이면 양수를 리턴한다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
bool compareBySN(Player p1, Player p2)
{
    if(p1.score > p2.score)
    {
        return true;
    }
    else if (p1.score == p2.score)
    {
        if (p1.name.compare(p2.name) < 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}
vector<Player> comparator(vector<Player> players) {
    sort(players.begin(),players.end(),compareBySN);
    return players;
}
cs


풀이시간 : 15분?


풀이 중 문제점 : 

1. string 비교 함수의 반환값의 의미를 몰라서 검색해 봤었다.

2. algorithm::sort 함수의 세번째 인자로 주는 함수는 어떤 조건에서 true를 리턴해야 되는지 검색해 봤었다.

반응형