반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.
- 직장인인강
- SKT
- AI
- R
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지
- 한번에끝내는Java/Spring웹개발마스터초격차패키지
- albert
- 직장인자기계발
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online
- 패스트캠퍼스후기
- 패스트캠퍼스
- 패캠챌린지
- 알버트
Archives
- Today
- Total
제주 탈출 일지
[c++] nhn pre-test 1 - 1 본문
728x90
반응형
1번을 정말 공들여서 풀었지만,,, 다른 문제를 제대로 못풀게 되었다. 시간이 없어서 코드도 못가져옴.ㅠㅠ
#include <iostream>
#include <sstream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
void solution(int numOfAllPlayers, int numOfQuickPlayers, char *namesOfQuickPlayers, int numOfGames, int *numOfMovesPerGame) {
map<char, int> game_;//술래 걸린 횟수.
for(int i = 0; i < numOfAllPlayers; i++) // 참여하는 인원 수 만큼 map을 초기화.
{
game_[i+65] = 0;
}
if(0 >= numOfQuickPlayers || numOfQuickPlayers > numOfAllPlayers / 2) // 빠른 인원 수 제한
{
cout << "error" << endl;
return;
}
vector<char> fast;// 빠른 인원.
for(int i = 0; i < numOfGames; i++)
{
fast.push_back(namesOfQuickPlayers[i]); //빠른 인원 초기화
}
vector<int> gnum(numOfGames); //술래가 동작하는 방식.
for(int i = 0; i < numOfGames; i++) // 술래 움직임 초기화.
{
gnum[i] = numOfMovesPerGame[i];
}
//첫번째 술래는 A
//A는 gnum의 [0]처럼 움직인다.
char tagger = 'A'; // A는 처음 술래.
game_[tagger] += 1;
int tag_idx = 0;
map<int, char> set; // 앉을 자리
for(int i = 0; i < numOfAllPlayers-1; i++) // B부터 자리를 만듬
{
set[i] = 66+i;
}
// 첫번째 움직임 gnum.front();
vector<int>::iterator iter2;
for(iter2 = gnum.begin(); iter2 != gnum.end(); iter2++)
{
if(tag_idx + *iter2 < 0) // 인덱스가 0보다 작아지는 경우
{
map<int, char>::reverse_iterator iter = set.rbegin();
if(find(fast.begin(), fast.end(), set[iter->first - tag_idx + *iter2 + 1]) != fast.end() )// 빠른 사람이다.
{
game_[tagger] += 1; //빠른 사람은 술래가 되지 않기 때문에 술래가 한번 더.
tag_idx = iter->first - tag_idx + *iter2 + 1;
}
else //빠른 사람이 아니다.
{
char tmp = tagger;
tagger = set[iter->first - tag_idx + *iter2 + 1];
set[iter->first - tag_idx + *iter2 + 1] = tmp; //술래와 자리 변경
game_[tagger] += 1; //해당 자리의 사람은 이제 술래.
tag_idx = iter->first - tag_idx + *iter2 + 1;
}
}
else if(tag_idx + *iter2 > numOfAllPlayers-1) //최대자리보다 인덱스가 커지는 경우.
{
//set[set.front()->first - tag_idx + gnum.front + 1]
if(find(fast.begin(), fast.end(), set[tag_idx + *iter2 - numOfAllPlayers]) != fast.end())//빠른 사람이다.
{
game_[tagger] += 1;
tag_idx = tag_idx + *iter2 - numOfAllPlayers;
}
else //빠른 사람이 아니다.
{
char tmp = tagger; //?
tagger = set[tag_idx + *iter2 - numOfAllPlayers];
set[tag_idx + *iter2 - numOfAllPlayers] = tmp; //술래와 자리 변경
game_[tagger] += 1; //해당 자리의 사람은 이제 술래.
tag_idx = tag_idx + *iter2 - numOfAllPlayers;
}
}
else
{
if(find(fast.begin(), fast.end(), set[tag_idx + *iter2]) != fast.end())//빠른 사람이다.
{
game_[tagger] += 1;
tag_idx = tag_idx + *iter2;
}
else //빠른 사람이 아니다.
{
char tmp = tagger;
tagger = set[tag_idx + *iter2];
set[tag_idx + *iter2] = tmp; //술래와 자리 변경
game_[tagger] += 1; //해당 자리의 사람은 이제 술래.
tag_idx = tag_idx + *iter2;
}
}
}
//12시 방향부터 시계 방향으로 앉아 있는 사람들의 이름 및 술래에 걸린 횟수 출력
//set<int, char>
for(int i = 0; i < set.size(); i++)
{
cout << set[i] << " " << game_[set[i]] << endl;
}
cout << tagger << " " << game_[tagger];
}
struct input_data {
int numOfAllPlayers;
int numOfQuickPlayers;
char *namesOfQuickPlayers;
int numOfGames;
int *numOfMovesPerGame;
};
void process_stdin(struct input_data& inputData) {
string line;
istringstream iss;
getline(cin, line);
iss.str(line);
iss >> inputData.numOfAllPlayers;
getline(cin, line);
iss.clear();
iss.str(line);
iss >> inputData.numOfQuickPlayers;
getline(cin, line);
iss.clear();
iss.str(line);
inputData.namesOfQuickPlayers = new char[inputData.numOfQuickPlayers];
for (int i = 0; i < inputData.numOfQuickPlayers; i++) {
iss >> inputData.namesOfQuickPlayers[i];
}
getline(cin, line);
iss.clear();
iss.str(line);
iss >> inputData.numOfGames;
getline(cin, line);
iss.clear();
iss.str(line);
inputData.numOfMovesPerGame = new int[inputData.numOfGames];
for (int i = 0; i < inputData.numOfGames; i++) {
iss >> inputData.numOfMovesPerGame[i];
}
}
int main() {
struct input_data inputData;
process_stdin(inputData);
solution(inputData.numOfAllPlayers, inputData.numOfQuickPlayers, inputData.namesOfQuickPlayers, inputData.numOfGames, inputData.numOfMovesPerGame);
return 0;
}
728x90
반응형
'코딩 테스트' 카테고리의 다른 글
[c++][python3] 프로그래머스 레벨 1 - K번째 수 (0) | 2020.10.26 |
---|---|
[c++][python3] 프로그래머스 레벨 1 - 모의고사 (0) | 2020.10.26 |
[C++] nhn 사전 테스트 - 행렬의 영역 (1) | 2020.10.24 |
[C++] 프로그래머스 레벨 1 - 완주하지 못한 사람 구하기 (0) | 2020.10.24 |
[C++] 프로그래머스 레벨 1 - 두 개 뽑아서 더하기 (0) | 2020.10.23 |