본문 바로가기
C++ 코딩 문제 풀이/프로그래머스

[Programmers] 영어 끝말잇기

by 섬댕이 2023. 8. 27.

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

 

프로그래머스

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

programmers.co.kr

 


 

문제 해결 과정

착안

주어진 규칙에 따라 $i = 2, 3, ..., n$에 대하여, $i$번째 사람이 성공적으로 끝말잇기를 하는지 여부를 판단한다. 이때 이미 등장한 단어인지를 확인하는 과정을 위해 해시 맵(hash map) 자료 구조를 활용하여 문자열에 대한 탐색을 빠르게 수행하고자 하였다.

 

구현

해시 맵 자료 구조를 사용하기 위하여 std::unordered_map<> 클래스 및, 해당 클래스의 [] 연산자 특성을 활용하였다.

 

[스포 주의] 아래 '더보기'를 누르면 코드가 나오니 주의하세요~

더보기
#include <string>
#include <vector>
#include <unordered_map>

using namespace std;

unordered_map<string, int> wordMap;

bool decision(string prev, string next)
{
	return prev.back() == next.front() && wordMap[next] == 1;
}

vector<int> solution(int n, vector<string> words)
{
	vector<int> answer(2);
	wordMap[words[0]]++;

	for (int i = 1; i < words.size(); i++)
	{
		wordMap[words[i]]++;
		if (!decision(words[i - 1], words[i]))
		{
			answer = { i % n + 1, i / n + 1};
			break;
		}
	}

	return answer;
}

 

실행 결과

댓글