[프로그래머스] 영어 끝말잇기

김개발·2021년 8월 13일
0

프로그래머스

목록 보기
11/42

문제 푼 날짜 : 2021-08-13

문제

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/12981

접근 및 풀이

주어진 조건을 체크해주면서 완전탐색을 이용하면 쉽게 풀 수 있는 문제였다.
좀 더 쉽고 깔끔하게 구현할 수 있을 것 같았지만, 아래와 같이 생각나는 대로 알고리즘을 구현해주었다.

  1. 직전에 나온 단어의 마지막 알파벳(코드 내의 last)과 현재 단어의 첫번째 알파벳을 비교해준다.
  2. 단어가 이전에 나왔는지 체크해주기 위해 vector(코드 내의 check)에 단어들을 넣어준다.

코드

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

using namespace std;

vector<int> solution(int n, vector<string> words) {
    vector<int> answer{ {}, {} };
    
    char last = words[0].back();
    vector<string> check{words[0]};
    
    for (int i = 1; i < words.size(); i++) {
        if (words[i].front() != last || find(check.begin(), check.end(), words[i]) != check.end()) {
            answer[0] = (i % n) + 1;
            answer[1] = (i / n) + 1;
            break;
        }
        last = words[i].back();
        check.push_back(words[i]);
    }
    return answer;
}

결과

피드백

생각을 좀 더 깔끔하게 구현하는 연습을 해야할 것 같다.

profile
개발을 잘하고 싶은 사람

0개의 댓글