문제 링크입니다: https://www.acmicpc.net/problem/14653
기본적으로 Q번째 톡을 읽은 사람들은 1 ~ (Q - 1)번째 톡도 읽었다는 것이 핵심인 문제였습니다.
알고리즘은 아래와 같습니다.
1. Q 번째 톡을 안 읽은 사람이 0명이면 전원 읽었으므로 -1을 출력합니다.
2. 1번의 경우가 아니라면 Q 번째 톡을 안 읽은 사람과 같거나 적은 톡을 보낸 사람들은 Q번째 톡을 읽은 사람이기 때문에 Read에 표시를 합니다.
3. Read에 표시되어 있지 않은 사람들을 출력합니다.
*기존에 Read 함수를 read로 정의했다가 read 라는 이름을 가진 unix system call 함수랑 충돌해서 런타임 에러가 발생했었습니다.
#include <iostream>
using namespace std;
const int MAX = 10000 + 1;
int N, K, Q;
pair<int, char> arr[MAX];
bool Read[26];
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0); //cin 실행속도 향상
cin >> N >> K >> Q;
for (int i = 1; i <= K; i++)
cin >> arr[i].first >> arr[i].second;
int unRead = arr[Q].first;
if (!unRead)
cout << -1 << "\n";
else
{
//안 읽은 사람 옆에 있는 숫자가 unRead보다 작을 수는 없다
for (int i = 1; i <= K; i++)
if (unRead <= arr[i].first)
{
int idx = arr[i].second - 'A';
Read[idx] = true;
}
//읽지 않은 친구들 출력
//A는 항상 읽었다
for (int i = 1; i < N; i++)
if (!Read[i])
cout << char(i + 'A') << " ";
cout << "\n";
}
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 14655번 욱제는 도박쟁이야!! (0) | 2018.08.09 |
---|---|
백준 14654번 스테판 쿼리 (0) | 2018.08.09 |
백준 14652번 나는 행복합니다~ (0) | 2018.08.07 |
백준 14651번 걷다보니 신천역 삼(Large) (0) | 2018.08.07 |
백준 14650번 걷다보니 신천역 삼(Small) (0) | 2018.08.07 |