빼미의 개발일기

[프로그래머스][Lv.1] - 카드 뭉치 본문

코딩테스트/프로그래머스

[프로그래머스][Lv.1] - 카드 뭉치

빼미01 2024. 1. 2. 18:39

 

● 소감

- 너저분해서 맘에 안드는데 대부분 이렇게 풀어서 의아하다.

 

● 나의 풀이

더보기
1) 문제 이해

 

- 사용된 카드를 제외하고 앞에 있는 카드가 goal의 문장을 만드는데 사용이 될 수 있는지, 없는지를 보는 문제.

- 제공되는 배열도 2개밖에 없어서 각각 인덱스 접근만 하면 되는 거라 쉬웠던 문제

- queue를 사용해볼까도 싶었으나, 굳이 제공된 배열을 queue로 옮기는데 더 걸릴거 같아서 그냥 패스

 

2) 조건 찾기

 

- 두 배열의 각 인덱스를 따로 만든다. goal의 문장은 for문으로 확인 할 수 있고, if로 해당 goal의 string이 두 배열의 현재 위치가 있냐 없냐만 확인하면 되기 때문에 두 배열중 있었다면 해당 인덱스를 증가 시켜준다.

- 증가를 하다보면 결국 배열의 인덱스를 초과하는 상황이 일어나는데, 나는 그냥 두 배열 뒤에 의미없는 문자를 하나 집어 넣는걸로 해결했다. (안좋은 코드라는걸 알지만ㅠ)

- 정답 탐방중 내 코드처럼 인덱스를 접근한 답이 있었는데 이건 또 뒤에 추가를 안했는데도 됐다..(?) 때문에, 나도 정답을 맞춘 뒤에 의미없는 문자를 지우고 제출을 했는데 정답이었다.. (뭐지???)

 

int index1 = 0, index2 = 0;
cards1.push_back("0");	// 제출할땐 없어도 정답
cards2.push_back("0");	// 제출할땐 없어도 정답

for(int i  = 0; i < goal.size(); i++)
{
	bool check = false;
		if (goal[i] == cards1[index1])
		index1++;
	else if (goal[i] == cards2[index2])
		index2++;
	else
		check = true;
		if(check)
	{
		answer = "No";
		break;
	}
}

 

● 내가 작성한 답

더보기
string solution(vector<string> cards1, vector<string> cards2, vector<string>  goal)
{
	string answer = "Yes";

	int index1 = 0, index2 = 0;
	cards1.push_back("0");
	cards2.push_back("0");

	for(int i  = 0; i < goal.size(); i++)
	{
		bool check = false;

		if (goal[i] == cards1[index1])
			index1++;
		else if (goal[i] == cards2[index2])
			index2++;
		else
			check = true;

		if(check)
		{
			answer = "No";
			break;
		}
	}

	return answer;
}
Comments