프로그래밍/코딩 문제 풀이
프로그래머스 2023.06.04 (2Lv 영어 끝말잇기)
Rozentea
2023. 6. 19. 16:47
문제
코딩
#include <string>
#include <vector>
#include <iostream>
using namespace std;
vector<int> solution(int n, vector<string> words) {
vector<int> answer;
int num = 1;
int turn = 0;
vector<string> vecgarbage = {};
string word = *words.begin();
vecgarbage.push_back(*words.begin());
words.erase(words.begin());
while (true)
{
turn++;
if (num == n)
num = 0;
for (; num < n;)
{
if (words.size() == 0)
{
answer.push_back(0);
answer.push_back(0);
return answer;
}
++num;
if (word.back() == words[0].front())
{
vector<string>::iterator iter = vecgarbage.begin();
for (; iter != vecgarbage.end(); ++iter)
{
if (words[0] == *iter)
{
answer.push_back(num);
answer.push_back(turn);
return answer;
}
}
word = *words.begin();
vecgarbage.push_back(*words.begin());
words.erase(words.begin());
}
else
{
answer.push_back(num);
answer.push_back(turn);
return answer;
}
}
}
}
끝말잇기 성공/실패 여부를 확인하기 위해 string class 멤버함수 string.front(), string.back() 를 이용해 문자열의 제일 앞 글자와 뒷 글자를 비교해주었다.
또한, 사용된 문자를 정리할 vector를 추가로 선언해(vecgarbage) 이번에 검사할 단어가 이전에 사용된 단어인지 확인하도록 만들었다.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
vector<int> solution(int n, vector<string> words) {
vector<int> answer;
int num = 1;
int turn = 0;
int PrevIdx = 0;
int Idx = 0;
while (true)
{
turn++;
if (num == n)
num = 0;
for (; num < n;)
{
++num;
Idx = PrevIdx + 1;
if (words.size() == Idx)
{
answer.push_back(0);
answer.push_back(0);
return answer;
}
if (words[PrevIdx].back() == words[Idx].front())
{
for (int i = 0; i < Idx; ++i)
{
if (words[Idx] == words[i])
{
answer.push_back(num);
answer.push_back(turn);
return answer;
}
}
}
else
{
answer.push_back(num);
answer.push_back(turn);
return answer;
}
PrevIdx++;
}
}
}
vecgarbage를 만들어 검사하는게 마음에 들지 않아서, vector를 추가 선언하지 않고 제대로 실행되도록 만들었다.