본문 바로가기
알고리즘 문제/2024 AOC

[2024 AOC] 1일차 CPP

by odaebum 2024. 12. 1.
728x90

https://adventofcode.com/2024

 

Advent of Code 2024

 

adventofcode.com

 

문제 1번

 

생각

단순하게 왼쪽 숫자와 오른쪽 숫자를 정렬 후 거리를 구하는 문제이다.

풀이

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

const int MAX = 1000;

vector<int> l;
vector<int> r;

void input(){
    int left, right;
    for(int i = 0; i < MAX; i++){
        cin >> left >> right;
        l.push_back(left);
        r.push_back(right);
    }
}

void sol(){
    sort(l.begin(), l.end());
    sort(r.begin(), r.end());

    int answer = 0;

    for(int i = 0; i < MAX; i++){
        answer += abs(l[i] - r[i]);
    }

    cout << answer << endl;
}

int main(){
    input();
    sol();
    return 0;
}

 

 

 

문제

 

생각

왼쪽 숫자를 기준으로 오른쪽에 같은 숫자가 몇 번 나와있는지 구하는 문제이다.

따라서 오른쪽 숫자는 input으로 받을 때 나온 횟수를 저장하였다.

 

풀이

#include <iostream>
#include <vector>
using namespace std;

const int INPUT_SIZE = 1000;
const int MAX = 100000;

vector<int> l;
int similarity_score[MAX];

void init(){
    for(int i = 0; i < MAX; i++){
        similarity_score[i] = 0;
    }
}

void input(){
    int left, right;
    for(int i = 0; i < INPUT_SIZE; i++){
        cin >> left >> right;
        l.push_back(left);
        similarity_score[right]++;
    }
}

void sol(){
    int answer = 0;
    for(int i = 0; i < l.size(); i++){
        answer += l[i] * similarity_score[l[i]];
    }
    cout << answer << endl;
}

int main(){
    init();
    input();
    sol();
    return 0;
}
728x90

'알고리즘 문제 > 2024 AOC' 카테고리의 다른 글

[2024 AOC] 2일차 CPP  (0) 2024.12.03