본문 바로가기
Algorithm/프로그래머스

[프로그래머스]Summer/Winter Coding(~2018) : 영어 끝말잇기 (level 2)(c++)

by HBGB 2020. 5. 23.

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

 

코딩테스트 연습 - 영어 끝말잇기

3 [tank, kick, know, wheel, land, dream, mother, robot, tank] [3,3] 5 [hello, observe, effect, take, either, recognize, encourage, ensure, establish, hang, gather, refer, reference, estimate, executive] [0,0]

programmers.co.kr

 

#include <string>
#include <vector>
#include <iostream>
#include <set>

using namespace std;

vector<int> solution(int n, vector<string> words) {
    
    set<string> s;
    vector<int> answer(2);

    // 첫번째 단어 push
    s.insert(words[0]);

    // 2번째 단어부터 검사
    int len = words.size();
    for (int i = 1; i < len; ++i)
    {
        // 단어가 2번 이상 등장하거나, 앞 단어의 끝 글자와 같지 않다면
        if (s.find(words[i]) != s.end() || *words[i - 1].rbegin() != words[i][0])
        {
            answer[0] = i % n + 1;
            answer[1] = i / n + 1;
            return answer;
        }

        // 단어 push
        s.insert(words[i]);
    }

    return answer;
}

 

set 대신에 map을 사용해서 카운팅 해줘도 된다.

 

string의 끝 글자가 필요할 땐 rbegin() 함수가 유용하다.

*words[i - 1].rbegin()

 

댓글