카메라 개발자 공부방(SW)

프로그래머스lv2-영어 끝말잇기 본문

코딩문제풀이

프로그래머스lv2-영어 끝말잇기

luckmart 2022. 9. 8. 09:05
반응형

프로그래머스 끝말 잇기 문제이다.

 

현재사람의 끝말과 다음 사람의 첫말이 다른 경우,

이미 전에 불렸던 단어라면 탈락이 되고 가장 먼저 탈락하는 사람의 번호와 몇 번째 차례에서 탈락 했는지를 찾아서 반환  하면된다.

#include <string>
#include <vector>
#include <iostream>
#include <map>

using namespace std;

vector<int> solution(int n, vector<string> words) {
    vector<int> answer;
    vector<vector<string>> people(n);
    map<string, int> m;

    people[0].push_back(words[0]);
    m[words[0]] = 1;

    for (int i = 1; i < words.size(); i++) {
        people[i % n].push_back(words[i]);

        int len = words[i - 1].length();
        if (words[i - 1][len - 1] == words[i][0] &&
            m.find(words[i]) == m.end()) {
            m[words[i]] = 1;
        }
        else {
            answer.push_back(i % n + 1);
            answer.push_back(people[i % n].size());
            return answer;
        }
    }

    answer.push_back(0);
    answer.push_back(0);

    return answer;
}

사람 마다 불린 단어를 관리하기 위해서 vector를 사람 별로 놓았다. 이렇게 따로 관리하니 vector의 사이즈가 몇번째 차례인지를 나타내는 값이 되었다. 이전에 불렸던 단어인지 확인하기 위해 map을 사용하였다. 이전 단어와 그 다음 단어가 다르거나 이미 맵에 word가 존재하는 경우 정답을 반환하도록 작성하였다.

Comments