프로그래밍/코딩 문제 풀이

프로그래머스 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를 추가 선언하지 않고 제대로 실행되도록 만들었다.

실행 결과