●문제


●입출력

문제풀이
n명의 사람이 있고 words에 들어있는 문자순서대로 n명의 사람이 번갈아가며 끝말잇기를 했을때
몇번째 사람이 몇번째 단어에서 똑같은단어를 이야기하는지 [번호, 차례]를 리턴
푼방법
set으로 map에 첫번쨰 단어를 넣고
for문으로 words문장을 순회하면서
첫번째단어부터 .size()만큼 순회
이전 단어 prev와 현재단어 current단어를 비교 prev.back() != current.front 이거나 이미 맵에 있을때 즉 count될때
즉 위반했을때 번호와 차례를 return
번호는 (i % n) + 1
차례는 (i / n) + 1
이렇게구하면 번호는 1, 2, 3, 4 이런식으로 나오고
차례는 1,1,1 2,2,2, 3,3,3 이런식으로 나옴
#include <string>
#include <vector>
#include <set>
using namespace std;
vector<int> solution(int n, vector<string> words)
{
//map에 이미 있다면 return
//for문으로 1번부터 .size까지 순회
//구해야하는값은 사람번호, 차례
//사람번호는 (i % n) + 1 // 1, 2, 3, 4, 5
//사람차례는 (i / n) + 1 // 1,1,1, 2,2,2 3,3,3
set<string>used_Words;
used_Words.insert(words[0]);
for (int i = 1; i < words.size(); i++)
{
//만약 map에 이미 있거나 뒤 != 앞 이 아닐때
string current_Word = words[i];
string prev_Word = words[i - 1];
//이전의 back != 현재의 front아닐때 || 이미 map에 있을떄
if (prev_Word.back() != current_Word.front() || used_Words.count(current_Word))
{
int person_Num = (i % n) + 1; // 1, 2, ,3 ,4...
int person_Round = (i / n) + 1; // 1,1,1, 2,2,2, 3,3,3...
return { person_Num, person_Round };
}
used_Words.insert(current_Word);
}
return { 0, 0 };
}
레벨 : 2
점수 : 1
'C++ 프로그래머스 > 기타 문제' 카테고리의 다른 글
| 프로그래머스(C++) - 행렬의 곱셈 (0) | 2025.10.20 |
|---|---|
| 프로그래머스(C++) - 예상 대진표 (0) | 2025.10.12 |
| 프로그래머스(C++) - 귤 고르기 (0) | 2025.10.10 |
| 프로그래머스(C++) - 멀리뛰기 (0) | 2025.10.10 |
| 프로그래머스(C++) - 다음 큰 숫자 (0) | 2025.08.02 |
