C++/코드트리 챌린지

[코드트리 챌린지] 6주차 HashMap - HashMap / 낮은 지점들

tmd1 2023. 10. 14. 18:56

 

 

 

 

https://www.codetree.ai/missions/8/problems/lowest-points/description

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

코드:

#include <bits/stdc++.h>
#include <unordered_map>
using namespace std;

int n;
unordered_map<int, int> hMap;
vector<int> xArr;

int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n;

    long long sum = 0;

    while (n--) {
        int x, y;
        cin >> x >> y;

        // x가 이미 존재하는 경우
        if (hMap.find(x) == hMap.end()) {
            hMap[x] = y;
            xArr.push_back(x);
        }
        else {
            // 있는 경우 y가 더 작다면 갱신
            if (hMap[x] > y) {
                hMap[x] = y;
            }
        }
    }
	
    // 모든 x를 순회하며 y값을 더함
    for (int i = 0; i < xArr.size(); i++) {
        sum += hMap[xArr[i]];
    }

    cout << sum;

}
n을 입력받아 n번 만큼 각각 x,y 좌표값을 입력 받습니다. 이때 x값들은 나중에 y값을 찾을 때 사용해야
하므로 vector 배열에 저장해주도록 합니다.

만약 입력받은 x의 값이 이미 HashMap에 존재할 경우 지금 입력받은 y의 값과 비교하여
더 작다면 value값을 갱신해주도록 합니다.

모든 x의 좌표를 살펴보면서 y의 값을 모두 더해 출력하도록 합니다.

이때 y의 값들의 합이 매우 크게 될 수 있으므로 sum의 자료형은 long long으로 설정해야 합니다!