프로그래머스

[C++][프로그래머스][Lv2] 12981. 영어끝말잇기

youcheachae 2025. 1. 21. 11:25

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