영어 종료/Lv.2
문제 설명)
1에서 n까지 번호가 매겨진 n명의 사람이 영어로 끝납니다.
영어의 끝은 다음 규칙으로 이루어집니다.
- 1번부터 번호순으로 한 사람씩 차례로 단어를 말합니다.
- 마지막 사람이 단어를 말한 후 다시 시작부터 시작합니다.
- 이전 사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야합니다.
- 이전에 등장한 단어는 사용할 수 없습니다.
- 한 글자의 단어는 허용되지 않습니다.
다음은 세 사람이 종료되는 상황을 보여줍니다.
tank→kick→know→wheel→land→dream→mother→robot→tank
위의 종료는 다음과 같이 수행됩니다.
- 한 사람은 자신의 첫 번째 턴에 탱크를 말합니다.
- 두 번째 사람은 자신의 첫 번째 턴에 킥을 말합니다.
- 세 번째 사람은 자신의 첫 번째 턴에 know를 말합니다.
- 첫 번째는 자신의 두 번째 바퀴를 말합니다.
- (계속 진행)
끝을 계속하면 3번째 사람이 자신의 3번째에 말한 tank라는 단어는 이전에 등장한 단어이므로 탈락하게 됩니다.
인원수 n과 사람이 차례로 말한 단어 words가 파라미터로서 주어질 때, 최초로 탈락하는 사람의 번호와 그 사람이 자신의 몇번째에 탈락하는지를 요구해 return 하도록 solution 함수를 완성해 제발.
제한사항)
- 끝에 참여하는 사람의 수 n은 2 이상 10 이하의 자연수입니다.
- words는, 말미에 사용한 단어가 차례로 포함되는 배열로, 길이는 n 이상 100 이하입니다.
- 단어의 길이는 2 이상 50 이하입니다.
- 모든 단어는 알파벳 소문자로만 구성됩니다.
- 끝에 사용되는 단어의 의미(의미)는 신경 쓰지 않아도 됩니다.
- 정답은 (번호, 순서)의 형태로 return하십시오.
- 주어진 단어에서 탈락이 발생하지 않으면 (0, 0)을 반환합니다.
입출력 예)
입출력 예 설명)
입출력 예 #1
3명이 끝에 참가하고 있습니다.
- 첫 번째: tank, wheel, mother
- 두 번째: 킥, 랜드, 로보
- 세 번째: know, dream, tank
와 같은 순서로 말을 하게 되고, 3명이 자신의 3번째로 말했다 tank라는 단어가 첫 번째 사람이 자신의 첫 번째 턴에 말했습니다.
tank와 같기 때문에, 3번째 사람이 자신의 3번째로 말할 때, 처음으로 탈락자가 나오게 됩니다.
입출력 예 #2
5명이 끝에 참가하고 있습니다.
- 첫 번째: hello, recognize, gather
- 두 번째: observe, encourage, refer
- 세 번째 : effect, ensure, reference
- 네 번째: take, establish, estimate
- 5번인 : either, hang, executive
와 같은 순서로 토론하고, 이 경우에는 주어진 단어만으로는 탈락자가 발생하지 않습니다.
따라서 (0, 0)을 반환합니다.
입출력 예 #3
두 사람이 끝에 참여하고 있습니다.
- 첫 번째: hello, even, now, draw
- 두 번째: one, never, world
같은 순서로 말하게 되고, 1번째 사람이 자신의 3번째에 ‘r’로 시작하는 단어 대신 n으로 시작 now를 말했기 때문에, 이때 처음으로 탈락자가 나오게 됩니다.
풀)
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
33
34
35
|
#include <문자열>
#include <벡터>
#include <set>
using 네임스페이스 std;
벡터<int> 솔루션 (int n, 벡터<문자열> 단어) {
// 그 사람이 몇 번 말했는지 계산
벡터<int> person(n, 0);
// 중복이 없는 데이터 구조
set<문자열> 단어;
// 첫 문자는 미리 넣어
char temp = 단어(0)(0);
for(int i = 0;i < 단어.크기(); i++)
{
//(i%n)+1명이 말한 횟수
person(i % n)++;
// 터미네이션이 가능하고 중복되지 않은 경우에만 전달됩니다.
if (temp == 단어 (i) (0) && word.find(words(i)) == 단어.끝())
{
word.insert(words(i));
temp = *(words(i).끝() – 1);
}
// 끝이 불가능하거나 중복 단어를 말하면,
else
{
return 벡터<int> {(i%n) + 1,person(i%n)};
}
}
return 벡터<int> {0, 0};
}
|
cs |
출처: https://school.programmers.co.kr/learn/courses/30/lessons/12981