문제를 간단히 설명하자면 채팅의 개수가 N개면 닉네임과 채팅 내용이 N쌍 주어집니다. 그중 채팅 내용이 당첨자의 채팅 내용과 같은 사람들은 모두 정답을 외친 사람들입니다. 정답을 외친 사람들 중에서 랜덤으로 1명이 상품을 받게 되는데 이때, 뽑힌 당첨자보다 빨리 정답을 외친 사람들은 아쉬운 사람이 됩니다.
코드를 보면 먼저 채팅 개수 N과 당첨자의 닉네임 S를 입력받았습니다. 전체 참가자의 닉네임과 전체 채팅 내용은 채팅 개수 NN개만큼 주어지게 됩니다. 한 사람이 두 번 이상 채팅을 친 경우는 주어지지 않기 때문에 채팅 개수와 참가자 수는 같게 되기 때문입니다. 따라서 전체 채팅 개수 N만큼 반복하여 전체 참가자의 닉네임과 채팅 내용을 하나씩 입력받을 수 있습니다. 입력받으면서 동시에 당첨자의 닉네임을 if문을 통해 탐색해 당첨자의 인덱스를 찾았습니다.
당첨자 인덱스를 이용해 당첨자 바로 전까지 친 채팅 내용들을 살펴보며 당첨자의 채팅 내용과 같은 경우를 탐색해 그 수를 세었습니다. 여기서 탐색한 당첨자의 채팅 내용과 채팅 내용이 같은 사람들은 당첨자보다 빨리 정답을 외쳤지만 당첨되지 못한 사람들이므로 아쉬운 사람들입니다. 당첨자 바로 전까지 친 채팅 내용들을 하나씩 살펴보며 아쉬운 사람들의 수를 구할 수 있었고 이를 출력해줬습니다.
#include <iostream>#include <string>using namespace std;
int main(void)
{
int N;//채팅 개수(2<=N<=1000)
string S;//정답자(당첨자)의 닉네임
string user[1000];//전체 참가자의 닉네임 (채팅 개수N만큼 주어짐) -> (한 사람이 두 번 이상 채팅을 친 경우는 주어지지 않기 때문임)
string chat[1000];//전체 채팅 내용 (채팅 개수N만큼 주어짐)int answer;//당첨자의 인덱스int people = 0;//아쉬운 사람의 수(당첨자보다 빨리 정답을 외친 사람)
cin >> N >> S;
/*
전체 채팅 개수(전체 참가자 수)만큼 반복하여 전체 참가자의 닉네임과 채팅내용을 입력받음.
정답자의 닉네임을 찾아 해당 인덱스를 저장함.
*/for (int i = 0; i < N; i++)
{
cin >> user[i] >> chat[i];//전체 참가자의 닉네임과 채팅내용 하나하나 입력받음if (user[i] == S)//입력받은 참가자의 닉네임이 당첨자의 닉네임과 같다면
answer = i;//당첨자의 인덱스 저장
}
/*
당첨자 바로 전까지 친 채팅 내용들을 살펴보며 당첨자의 채팅 내용과 같은 사람(채팅)의 수를 셈
*/for (int i = 0; i < answer; i++)
{
if (chat[i] == chat[answer])//당첨자의 채팅내용과 같다면
{
people++;//아쉬운 사람 수 1 증가
}
}
cout << people;//아쉬운 사람의 명수 출력
}
Arduino
복사