Spicy Tuna Sushi
본문 바로가기
문제를 풀자

[프로그래머스] 영어 끝말잇기(C++)

by 말린malin 2022. 8. 19.

https://school.programmers.co.kr/learn/courses/30/lessons/12981

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제에 나온 대로 구현하면 되는 문제다.

중복 단어인지 확인을 위해, 나오는 단어들은 save vector에 저장해둔다.

또한, 끝말잇기가 가능한지 따지기 위해 save vector의 마지막 문자와, 제시할 단어의 첫 문자를 비교한다.

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(int n, vector<string> words) {
    vector<int> answer;    
    int index=0; //words 접근 인덱스
    int time=1;//차례 저장
    vector<string>save;//나온 단어를 저장하는 벡터
    
    while(1)
    {
        if(index==words.size())//다 통과함
        {
            answer.push_back(0);
            answer.push_back(0);
            break;
        }
        int check=0;//break나왔는지 확인하는 용도
        for(int j=1;j<=n;j++)//몇번 사람인지
        {
            string S=words[index];
            //전에 나온 단어인지 확인
            auto it = find(save.begin(), save.end(), S);
            if (it != save.end()) //전에 나온 단어라면
            {
                answer.push_back(j);//사람 번호
                answer.push_back(time);//차례
                check=1;
                break;
            }
            
            if(!save.empty())//처음만 아니라면 끝말잇기가 가능한지 확인 
            {
                if(save.back().back()!=S.front()) //끝말잇기 불가능하다면
                {
                    answer.push_back(j);//사람 번호
                    answer.push_back(time);//차례
                    check=1;
                    break;
                }
                
            }
            save.push_back(S);
            index++;
        }
        if(check)
            break;
        time++;
    }

    return answer;
}

댓글