안녕 세상아,

[프로그래머스/c++] Lv2 영어 끝말잇기 본문

프로그래머스

[프로그래머스/c++] Lv2 영어 끝말잇기

돈 많은 백수가 되고싶다 2024. 9. 25. 18:00

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

 

프로그래머스

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

programmers.co.kr

1. answer 벡터를 0으로 초기화한다. 

2. map을 사용하여 m을 선언한다. 

3. last_words 변수는 단어의 마지막 문자를 뜻한다. 처음에는 첫 단어의 첫번째 문자를 넣어놓는다.

4. for문을 사용하여 answer값을 도출한다. 

5. word 변수는 words[i] 값을 넣는다.

6. 이미 있는 단어일 때와 끝말잇기 규칙에 맞지 않으면 answer에 사람 번호, 몇번째 단어인지 삽입하고 return 해준다. 

7. 마지막 문자를 현재 단어의 마지막 문자로 갱신한다. 

8. 만약 if문에 걸리는 것이 없다면 0,0을 출력한다.  

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

using namespace std;

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

    char last_words = words[0][0];    //단어의 마지막 문자

    for (int i = 0; i < words.size(); i++) {
        string word = words[i];
        if (m[word]) {            //이미 있는 단어라면?
            answer[0] = i % n + 1;    //사람 번호
            answer[1] = i / n + 1;    //몇번째 단어
            return answer;
        }
        if (i > 0 && word[0] != last_words) {   //끝말잇기 규칙에 안맞으면?
            answer[0] = i % n + 1;
            answer[1] = i / n + 1;
            return answer;
        }
        last_words = word[word.size() - 1]; //마지막 문자 갱신
        m[word] = true; //이미 있는 단어일 때 판별
    }

    return answer;
}

 

어려웠다...ㅠ....흐읍...아직 많이 부족한걸 또 깨닫고 가요..