Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 | 29 | 30 |
Tags
- pyqt menu bar
- Python
- 두 문자열
- 도커
- pyqt layout
- 하이퍼바이저
- 네트워크 스택
- git
- 해커랭크
- Two Characters
- 17609
- 3D Surface Area
- 회문
- tcp stack
- pyqt status bar
- PyQt
- 백준
- 백준 알고리즘
- git 명령어
- 프로그래밍 문제
- Queen's Attack
- git 입문
- 리눅스 커널
- 커널 패킷 처리
- Queen's Attack II
- 혁진이의 프로그램 검증
- pyqt button
- hackerrank
- SWEA
- pyqt tooltip
Archives
- Today
- Total
뜸부기와 공작새
[해커랭크 (Hacker Rank)] - Climbing the Leaderboard 본문
[사이트 링크]
https://www.hackerrank.com/challenges/climbing-the-leaderboard/problem
[함수부 소스코드 (C++ 구현)]
typedef struct {
int rank;
int score;
} score_rank_t;
// Complete the climbingLeaderboard function below.
vector<int> climbingLeaderboard(vector<int> scores, vector<int> alice) {
int rank = 1;
score_rank_t sr;
vector<score_rank_t> score_rank;
vector<int> total_score;
/* score_rank 계산 */
vector<int>::iterator its; /* iteration of Scores */
for (its = scores.begin(); its != scores.end(); its++) {
sr.score = (*its);
if (its == scores.begin()) {
sr.rank = rank;
}
else if ((*its) == *(its - 1)) {
sr.rank = rank;
}
else {
sr.rank = ++rank;
}
score_rank.push_back(sr);
}
/* 입력한 Score Rank 벡터를 오름차순으로 변경하여 Alice값 입력 차순과 동일하게 맞춘다 */
reverse(score_rank.begin(), score_rank.end());
vector<int>::iterator ita; /* iteration of Alice */
vector<score_rank_t>::iterator itsc; /* iteration of Scores, Rank */
itsc = score_rank.begin();
for (ita = alice.begin(); ita != alice.end(); ita++) {
if (itsc != score_rank.begin()) { itsc--; }
for (; itsc != score_rank.end(); itsc++) {
if ((*ita) < (*itsc).score) {
total_score.push_back((*itsc).rank + 1);
break;
}
else if (itsc + 1 == score_rank.end()) {
total_score.push_back((*itsc).rank);
}
}
}
return total_score;
}
[내용]
- 점수, 랭크 정보를 함께 저장하여 관리할 구조체를 생성함
- 생성한 구조체 타입의 vector를 생성하여 입력받은 Score를 담고 이에 해당하는 랭크값을 계산하여 입력
(해당 자료구조를 vector가 아닌 map 자료구조를 이용했어도 될 뻔했다...) - Alice가 오름차순으로 값을 입력하니 Alice 입력데이터의 순차와 동일하게 맞추기 위해
score_rank vector reverse() 수행 - Score입력값, Rank값 Alice입력값 세 값 모두 순차가 동일하니
Score 입력vector는 Alice 입력값마다 begin() to end() loop 수행하는 것이 아닌
이전 Alice값이 찾은 Rank의 위치부터 다시 시작하도록 구현할 수 있음
(ex Alice[2]의 값이 Score[15]의 위치에서 Rank값 4를 얻었으면 Alice[3]값은 Score[0]부터 시작하는 것이 아니라
Score[15]부터 시작하여 수행시간을 줄임) - Alice의 랭킹을 저장하는 벡터를 출력하고 종료
- 지금 코드를 다시보니 가독성이 너무 떨어진다...
'프로그래밍 문제' 카테고리의 다른 글
[백준] 17609 회문 (0) | 2020.10.03 |
---|---|
[백준] 17391 무한부스터 (0) | 2020.04.02 |
[해커랭크(HackerRank)] - 3D Surface Area (0) | 2020.03.01 |
[해커랭크(HackerRank)] - Queen's Attack II (0) | 2020.01.29 |