Make Unreal REAL.
article thumbnail
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;
}
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그