Post

[BaekJoon] 2822번 - 점수 계산 [Java][C++]

[BaekJoon] 2822번 - 점수 계산 [Java][C++]

문제 링크


1. 문제 풀이


문제의 순서와 점수를 갖는 배열을 활용해서 점수를 기준으로 정렬하여 상위 다섯 문제의 점수 합을 구해줬다. 이때 문제 번호로 출력하기 위해 방문 체크 배열을 활용해 상위 다섯 문제의 번호도 기록해줬다.


2. 코드


1. 풀이 [Java]

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
31
32
import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int[][] arr = new int[8][2];
        for (int i = 0; i < 8; i++) {
            arr[i][0] = i;
            arr[i][1] = Integer.parseInt(br.readLine());
        }
        Arrays.sort(arr, (o1, o2) -> Integer.compare(o1[1], o2[1]));

        int sum = 0;
        boolean[] visited = new boolean[8];
        for (int i = 3; i < 8; i++) {
            sum += arr[i][1];
            visited[arr[i][0]] = true;
        }

        System.out.println(sum);
        for (int i = 0; i < 8; i++) {
            if (visited[i]) {
                sb.append(i + 1).append(" ");
            }
        }

        System.out.println(sb);
    }
}


2. 풀이 [C++]

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
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    vector<pair<int, int>> v(8);
    for (int i = 0; i < 8; i++) {
        cin >> v[i].first;
        v[i].second = i;
    }
    sort(v.begin(), v.end());

    int sum = 0;
    vector<bool> visited(8);
    for (int i = 3; i < 8; i++) {
        sum += v[i].first;
        visited[v[i].second] = true;
    }

    cout << sum << '\n';
    for (int i = 0; i < 8; i++) {
        if (visited[i]) {
            cout << i + 1 << ' ';
        }
    }
}

This post is licensed under CC BY 4.0 by the author.