https://programmers.co.kr/learn/courses/30/lessons/12981
이번 문제는 구현 문제였습니다.
단어의 중복을 피하기 위해 map 자료구조를 사용하면 더 쉬웠을 거 같아요!
《문제 풀이》
1. 끝말잇기를 할 때 이전에 등장했던 단어인지 체크하기 위해 appear 벡터 생성
2. 현재 단어의 첫 번째 문자가 이전 단어의 마지막 문자와 같지 않거나 현재 단어가 이전에 등장했던 단어이면
☛ 사람의 번호, 차례 반환
3. 탈락자가 없다면
☛ 0, 0 반환
《C++ 코드》
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
vector<int> solution(int n, vector<string> words) {
int label = 1;
int cnt = 1;
vector<string> appear;
appear.push_back(words[0]); // 첫 번째 단어 추가
for (int i=1; i<words.size(); i++) {
// 끝말잇기를 n번 수행했다면
if (label == n) {
label = 1; // 1번 사람부터 다시 시작
cnt++; // 다음 차례
} else label++;
// 규칙에 맞지 않게 끝말잇기를 했다면
if (words[i].front() != words[i-1].back() || find(appear.begin(), appear.end(), words[i]) != appear.end()) {
return { label, cnt };
}
appear.push_back(words[i]);
}
return { 0, 0 };
}
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 거리두기 확인하기 (0) | 2022.02.22 |
---|---|
[프로그래머스] 점프와 순간 이동 (0) | 2022.02.21 |
[프로그래머스] 프린터 (0) | 2022.02.17 |
[프로그래머스] 괄호 변환 (0) | 2022.02.16 |
[프로그래머스] 전화번호 목록 (0) | 2022.02.15 |