-
프로그래머스 택배상자 c++알고리즘/프로그래머스 2022. 10. 14. 13:24반응형
https://school.programmers.co.kr/learn/courses/30/lessons/131704
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <string> #include <vector> #include <stack> #include <iostream> using namespace std; int solution(vector<int> order) { int answer = 0; stack<int> s; int tmp = 0; for(int i=1; i<=order.size(); i++) { if(order[tmp] == i) { tmp++; answer++; } else { if(s.empty()) { s.push(i); } else { while(1) { if(s.empty()) break; if(s.top() == order[tmp]) { tmp++; answer++; s.pop(); } else { break; } } s.push(i); } } } while(1) { if(s.empty()) { break; } if(s.top() == order[tmp]) { tmp++; answer++; s.pop(); } else { break; } } return answer; }
order에 저장된 숫자들이 컨테이너에서 오는 상자 번호를 얘기하는게 아니라 트럭에 실을 상자 번호라는 사실을 유념하고 풀어야합니다 !
이 부분 때문에 정답률이 낮은게 아닐까 생각됩니다.
보조 컨테이너는 LIFO 구조 이므로 stack 으로 접근하면 쉽게 풀 수 있습니다.
**
코드가 더러워서 아래처럼 메소드로 뽑았는데 시간초과가 나네용
왜 틀리는지 아시는 분께서는 알려주시면 감사하겠습니다
#include <string> #include <vector> #include <stack> #include <iostream> using namespace std; stack<int> s; int tmp = 0; int answer = 0; void delete_stack(vector<int> order) { while(1) { if(s.empty()) break; if(s.top() == order[tmp]) { tmp++; answer++; s.pop(); } else { break; } } return; } int solution(vector<int> order) { for(int i=1; i<=order.size(); i++) { if(order[tmp] == i) { tmp++; answer++; } else { if(s.empty()) { s.push(i); } else { delete_stack(order); s.push(i); } } } delete_stack(order); return answer; }
728x90반응형'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 귤 고르기 c++ (2) 2022.11.26 프로그래머스 롤케이크자르기 c++ (0) 2022.11.08 프로그래머스 연속 부분 수열 합의 개수 c++ (0) 2022.10.14 프로그래머스 할인행사 c++ (1) 2022.10.13 카카오 행렬 테두리 연습하기 c++ (0) 2022.10.02