Deep Learning through deep learning

백준 10708번 크리스마스 파티 본문

Baekjoon_algorithm_heuristic

백준 10708번 크리스마스 파티

NeuroN 2023. 2. 2. 11:22

https://www.acmicpc.net/

 

Baekjoon Online Judge

Baekjoon Online Judge 프로그래밍 문제를 풀고 온라인으로 채점받을 수 있는 곳입니다.

www.acmicpc.net

코드 해석

더보기
  1. 게임 규칙은, N명의 친구중 1면이 타겟이 되고 자신만 자신이 타겟이라는걸 안다, 타겟에 대해 적을 수 있는 종이가 주어지고 N명의 친구들이 각각 그 사람의 이름을 적음 (타겟은 자기 이름 적음), 타겟을 맞추면 +1점/못맞추면 +0점/타겟은 +1점에 못만춘 사람 수 p일때 +p점까지 해서 총 +(1+p)점을 얻는다.
  2. 첫번째 줄에는 친구들의 수 N이 입력
  3. 두번째 줄에는 게임의 횟수 M이 입력
  4. 세번째 줄에는 타겟의 번호가 입력, 게임 순서대로 왼쪽부터 첫번째 타겟임
  5. 네번째 줄부터는 게임수만큼 줄이 입력되고, 각 줄마다 학생 수만큼 각자 종이에 적은 번호가 입력됨
  6. 총 M번의 게임이 끝나고 N명의 최종 점수를 순서대로 한줄에 한명씩 출력함
  7. 변수는 학생 수 int N, 게임 수 int M, 게임당 타겟 번호 1차원 벡터 A, 게임 당 학생들이 적은 번호 1차원 벡터 B
  8. 첫번째 for문에서는 학생들의 총 점수를 출력하기 위한 학생 수만큼의 크기의 1차원 벡터 score 공간 할당
  9. 두번째 for문에서는 각 게임마다 타겟의 번호를 저장해둘 게임 수 크기의 1차원 벡터 A 할당
  10. 2중 for문의 구조이며, 바깥쪽 for문에서는 M번의 게임을 진행하기 위해 M번의 반복을 돌린다.
  11. 안쪽 for문에서 첫번째는, 게임마다 학생들이 적을 번호에 대해 학생 수 크기만큼의 1차원 벡터 B에 번호들을 저장한다.
  12. 안쪽 for문에서 두번째는, 마찬가지로 학생 수 만큼 반복하는데, 학생들이 적은 번호가 적힌 B벡터와 타겟에 대한 번호가 적힌 A벡터가 같은 경우 score에서 해당 학생의 인덱스 점수를 +1해주고, 다른 경우에는 Ncount=0이라는 변수를 만들어 Ncount+=1을 해준다.
  13. 안쪽 두번째 for문이 끝나고, Ncount는 한 게임이 끝나고 맞추지 못한 사람들 수가 들어있고, 이 수를 타겟의 학생한테 점수로 주고, 다시 게임이 끝났으니 0으로 초기화해준다.
  14. 안쪽 세번째 마지막 for문에서는, 게임이 끝났으니 B벡터의 값과 크기를 다시 0으로 초기화해주고 다음 게임을 준비한다.
  15. 2중 for문이 끝나고, 제일 마지막 for문에서 각 학생마다의 score점수를 줄바꿈을 통해 출력해준다.

코드

#include <iostream>
#include <math.h>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int N; cin >> N;
    int M; cin >> M;
    vector<int> A;
    int a;
    vector<int> B;
    int b;
    vector<int>score;
    int Ncount = 0;
    for (int i = 0; i < N; i++)
    {
        score.push_back(0);
    }
    for (int i = 0; i < M; i++)
    {
        cin >> a;
        A.push_back(a);
    }
    for (int i = 0; i < M; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cin >> b;
            B.push_back(b);
        }
        for (int j = 0; j < N; j++)
        {
            if (B[j] == A[i])
            {
                score[j] += 1;
            }
            else
            {
                Ncount += 1;
            }
        }
        score[A[i]-1] += Ncount;
        Ncount = 0;
        for (int j = 0; j < N; j++)
        {
            B.pop_back();
        }
    }

    for (int i = 0; i < score.size(); i++)
    {
        cout << score[i] << endl;
    }
}

'Baekjoon_algorithm_heuristic' 카테고리의 다른 글

백준 27159번 노 땡스!  (0) 2023.02.02
백준 13752번 히스토그램  (0) 2023.02.02
백준 15820번 맞았는데 왜 틀리죠?  (0) 2023.02.02
백준 23806번 골뱅이 찍기 - ㅁ  (0) 2023.02.02
백준 5565 영수증  (2) 2023.02.02