https://school.programmers.co.kr/learn/courses/30/lessons/12981
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
❗풀이방법
1. 한 단어의 끝과 다음 단어의 처음이 같아야 한다.
// 첫번째 글자의 마지막 char
string endstring = words[0];
char endchar = endstring[endstring.size() - 1];
// 두번째 부터 검사
for (int i = 1; i < words.size(); i++)
{
// .....
// endchar 초기화 해주기
endchar = words[i][words[i].size() - 1];
}
2. 중복되는 단어가 들어오면 안된다
✅ c++의 set 사용
set<string> set;
auto temp = set.insert(words[i]);
: key값은 중복이 되지 않음
: set에 insert를 하게되면 pair<iterator , bool >형태로 return된다
: pair.first는 삽입한 원소(iteroator 타입), pair.second는 성공여부
❗전체코드
#include <iostream>
#include <vector>
#include <set>
using namespace std;
int main()
{
set<string> set;
int turn = 1; // 몇번째 턴이 돌았는지
int personindex = 1;
bool flag = false; // 중복이 있었는지
// 첫번째 글자의 마지막 char
string endstring = words[0];
char endchar = endstring[endstring.size() - 1];
set.insert(words[0]);
// 두번째 부터 검사
for (int i = 1; i < words.size(); i++)
{
// 한바퀴 돌면
if (i % n == 0)
turn++;
// 몇번째 사람인지
if (personindex == n)
personindex = 0;
personindex++;
auto temp = set.insert(words[i]);
if (endchar != words[i][0] || temp.second == false)
{
flag = false;
break;
}
endchar = words[i][words[i].size() - 1];
}
if (flag)
{
answer.push_back(0);
answer.push_back(0);
}
else
{
answer.push_back(personindex);
answer.push_back(turn);
}
}
https://github.com/churush912837465
'프로그래머스' 카테고리의 다른 글
[C++][프로그래머스][Lv2] 12985.예상 대진표 (1) | 2025.01.23 |
---|---|
[C++][프로그래머스][Lv2] 138476. 귤 고르기 (1) | 2025.01.22 |
[C++][프로그래머스][Lv2] 12980. 점프와 순간이동 (0) | 2024.07.18 |
[C++][프로그래머스][Lv2] 42842. 카펫 (1) | 2024.07.18 |
[C++][프로그래머스][Lv2] 12911. 다음 큰 숫자 (0) | 2024.07.11 |