JC0 2023. 8. 16. 23:18

map 사용법과 iterator사용이 오랫만이라 굉장히 헤맷던 문제였다.

중간에 문제는 해결했는데 모든 테스트 케이스를 통과하지 못했다.

이유는 2차원 벡터 vector<vector<string>photo 입력값이 행의 개수와 열의 개수가 같을 것이라고 가정하고 풀었는데 그렇지 않은 경우가 있기 때문이었다.

1행 3열과 2행 3열짜리 벡터 두개가 입력값으로 온다면 실패하게 되었다.

 

초반에 틀렸던 코드

vector<int> solution(vector<string> name, vector<int> yearning, vector<vector<string>> photo)
{
	vector<int> answer;
	map<string, int> map1;
	
	
	int col = photo[0].size();
	int row = photo.size();

	
	for (int i = 0; i < name.size(); i++)
	{
		map1.insert(pair<string, int>(name[i], yearning[i]));
		
	}
	
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			
			for (auto item : map1)
			{
				if (item.first == photo[i][j])
				{
					sum += item.second;
				}
			}
		}
		answer.push_back(sum);
		sum = 0;
	}
	
	return answer;
}

 

고친 코드

#include <string>
#include <vector>
#include <iostream>
#include <map>
using namespace std;
int sum;

vector<int> solution(vector<string> name, vector<int> yearning, vector<vector<string>> photo)
{
	vector<int> answer;
	map<string, int> map1;


	for (int i = 0; i < name.size(); i++)
	{
		map1.insert(pair<string, int>(name[i], yearning[i]));
		
	}
	
	for (int i = 0; i < photo.size(); i++)
	{
		for (int j = 0; j < photo[i].size(); j++)
		{
			
			for (auto item : map1)
			{
				if (item.first == photo[i][j])
				{
					sum += item.second;
				}
			}
		}
		answer.push_back(sum);
		sum = 0;
	}
	
	return answer;
}