https://school.programmers.co.kr/learn/courses/30/lessons/159994
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
코니는 영어 단어가 적힌 카드 뭉치 두 개를 선물로 받았다.
코니는 다음과 같은 규칙으로 카드에 적힌 단어들을 사용해 원하는 순서의 단어 배열을 만들 수 있는지 알고싶다.
- 원하는 카드 뭉치에서 카드를 순서대로 한 장씩 사용한다.
- 한 번 사용한 카드는 다시 사용할 수 없다.
- 카드를 사용하지 않고 다음 카드로 넘어갈 수 없다.
- 기존에 주어진 카드 뭉치의 단어 순서는 바꿀 수 없다.
풀이 방법
두 개의 카드 뭉치가 존재하므로 cards1_position = 0, cards2_position = 0으로 초기화하여,
각각의 카드 뭉치에서 현재 탐색 중인 위치를 저장한다.
그다음, goal 벡터를 순회하면서 두 카드 뭉치 중 하나에 단어가 존재할 경우, 해당 카드 뭉치의 현재 위치를 다음 인덱스로 이동한다.
만약, 두 카드 뭉치의 현재 위치에 있는 단어 중 어느 곳에서도 다음 단어를 찾을 수 없다면,
answer = "No"로 설정하고, 더 이상 탐색하지 않고 break를 실행한다.
풀이 코드
#include <string>
#include <vector>
using namespace std;
string solution(vector<string> cards1, vector<string> cards2, vector<string> goal) {
string answer = "Yes";
int cards1_position = 0, cards2_position = 0;
for(string s : goal){
if(s == cards1[cards1_position]) cards1_position++;
else if(s == cards2[cards2_position]) cards2_position++;
else {
answer = "No";
break;
}
}
return answer;
}
그다음, goal 벡터를 순회하면서 두 카드 뭉치 중 하나에 단어가 존재할 경우, 해당 카드 뭉치의 현재 위치를 다음 인덱스로 이동한다.
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] Lv.1 공원 산책 c++ (0) | 2025.01.05 |
---|---|
[프로그래머스] Lv.1 비밀지도 c++ (0) | 2025.01.05 |
[프로그래머스] Lv.1 행렬의 덧셈 c++ (0) | 2025.01.03 |
[프로그래머스] Lv.1 폰켓몬 c++ (0) | 2025.01.03 |
[프로그래머스] Lv.0 진료순서 정하기 c++ (2) | 2025.01.02 |