https://school.programmers.co.kr/learn/courses/30/lessons/159994
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
뭐지?? 너무 간단한데... 이게 맞나...
이 문제는 조건이 달려있어서 아주 쉽게 풀수가 있었다.
순서도 보장되고, 뛰어넘기도 안된다면!!
=> 그냥 순서대로 비교해보면서, 전부 통과하면 만들 수 있는거고, 중간에 걸리면?? 그냥 바로 NO 해버리면 된다.
만약 순서제한이라던지, 여러번사용가능과 같은 조건이 있었으면 조금 더 복잡하게 만들어야 했을것같고
반복문이 중첩되어 효율적인 방법을 생각해봐야했을것이다.
#include <string>
#include <vector>
using namespace std;
string solution(vector<string> cards1, vector<string> cards2, vector<string> goal) {
string answer = "";
int n1 = cards1.size();
int n2 = cards2.size();
int i1 = 0;
int i2 = 0;
for(int i = 0; i<goal.size(); i++){
if(i1 < n1 &&(!cards1[i1].compare(goal[i]))){
i1++;
continue;
}
if(i2 < n2 && (!cards2[i2].compare(goal[i]))){
i2++;
continue;
}
return "No";
}
return "Yes";
}
다음과같이 card1, card2를 위한 index를 만들어주고, 반복문은 goal에 대해서 돌리면 된다.
if문 두개에 걸려서 cotinue로 안넘어가면, 지금순서 카드로는 만들 수 없는거니까 바로 NO가 된다.
반복문을 전부다 무사히 통과했다는것은, 모든 if문을 한번씩 걸려왔다는 것이니까 Yes가 된다.
별다른 자료구조를 추가하지 않고도 해결가능한 문제였다.
저런식으로 index로 접근하는게 더 효율적인것,, 맞겠지? 내생각은 그렇다..ㅎㅎ
7/31 TIL : BFS (0) | 2024.08.01 |
---|---|
프로그래머스 : 정렬 - 가장 큰 수 (0) | 2024.08.01 |
백준 : 11279 - 최대힙 (0) | 2024.07.31 |
99클럽 코테 스터디 8일차 TIL : 이중우선순위큐 (0) | 2024.07.31 |
99클럽 코테 스터디 7일차 TIL : 더 맵게 (0) | 2024.07.30 |