Level 0. 전국 대회 선발 고사
1번부터 오름차순으로 배치하기 위해 map에 모든 순위와 참석 여부를 넣고 시작했다.
- 참석 여부는 true인 경우 인덱스를, false인 경우 -1을 넣어 구분했다.
이후, 앞에서부터 참석한 인원이 3명이 될 때까지 계산하면 된다.
#include <iostream>
#include <vector>
#include <map>
using namespace std;
int solution(vector<int> rank, vector<bool> attendance)
{
int answer = 0, cur = 0;
int arr[] = {10'000, 100, 1};
size_t size = rank.size();
map<int, int> mp;
for (int i = 0; i < size; ++i)
mp[rank[i]] = attendance[i] ? i : -1;
for (int i = 1; i <= size; ++i)
{
if (mp[i] != -1)
{
answer += arr[cur++] * mp[i];
if (cur == 3)
break;
}
}
return answer;
}
다른 사람의 풀이를 보고 map으로 정렬할 필요가 없다는 걸 깨달았다.
어차피 1 ~ n까지 모든 순위가 존재함을 보장하기 때문에, 그냥 n 크기의 벡터를 만들면 참석 여부를 모두 지정한 후에는 자동으로 벡터가 가득 차게 된다.
#include <iostream>
#include <vector>
using namespace std;
int solution(vector<int> rank, vector<bool> attendance)
{
int answer = 0, cur = 0;
int arr[] = {10'000, 100, 1};
size_t size = rank.size();
vector<int> v(size + 1);
for (int i = 0; i < size; ++i)
v[rank[i]] = attendance[i] ? i : -1;
for (int i = 1; i <= size; ++i)
{
if (v[i] != -1)
{
answer += arr[cur++] * v[i];
if (cur == 3)
break;
}
}
return answer;
}
'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글
Level 0. 세 개의 구분자 (0) | 2023.05.05 |
---|---|
Level 0. 문자열 여러 번 뒤집기 (0) | 2023.05.05 |
Level 0. 빈 배열에 추가, 삭제하기 (0) | 2023.05.04 |
Level 0. 정수를 나선형으로 배치하기 (0) | 2023.05.03 |
Level 0. 배열 만들기 6 (0) | 2023.05.03 |