728x90
프로그래머스에서 알고리즘을 풀던중...
스택을 사용해서 dfs를 구현했다.
아래 코드에서 요 부분이 오류가 발생했다.
// 오류가 발생한 부분
tuple<int, int> tp = st.pop();
tie(index, sum) = tp;
// 변경해서 해결한 부분
tuple<int, int> tp = st.top();
tie(index, sum) = tp;
st.pop();
pop()을 사용해 빼낸 튜플로는 초기화가 안 되더라...근데 top()은 된다...
파이썬을 쓸 때는 pop()을 사용해서 스택에서 제거함과 동시에 그 element를 반환받았다.
https://cplusplus.com/reference/stack/stack/pop/ ⬅︎ 이 사이트를 보면
c++에서는 top은 알고 있던 것처럼 스택의 맨 위의 값을 반환하는 것이지만
pop은 스택에서 element를 제거만 할 뿐, 반환값이 none이라고 한다.
또, top()은 참조형이라서 아래처럼 작성하는 것도 가능하다.
mystack.top() -= 5;
파이썬에 익숙해진만큼 다른 언어들에 대한 공부도 게을리하면 안 되겠다...
풀었던 문제는 레벨2 - 타겟 넘버
스택보다 재귀 코드가 더 깔끔한 듯
코드 전문
#include <string>
#include <vector>
#include <stack>
#include <tuple>
using namespace std;
int solution(vector<int> numbers, int target) {
int answer = 0;
tuple<int, int> tup;
stack<tuple<int, int>> st;
int index, sum;
tup = make_tuple(-1, 0);
st.push(tup);
while (!st.empty()){
tuple<int, int> tp = st.top();
tie(index, sum) = tp;
st.pop();
if(index+1 < numbers.size()){
tup = make_tuple(index+1, sum+numbers[index+1]);
st.push(tup);
tup = make_tuple(index+1, sum-numbers[index+1]);
st.push(tup);
}
else if(index+1 == numbers.size()){
if(sum == target)
answer++;
}
}
return answer;
}
'알고리즘' 카테고리의 다른 글
[C언어] RB 트리 구현(2) - 삭제, 탐색 (1) | 2024.02.18 |
---|---|
[C언어] RB 트리 구현(1) - 삽입 (0) | 2024.02.07 |
Red Black Tree(레드-블랙 트리) (0) | 2024.02.03 |
C언어) LinkedList, 연결리스트에 대해서 (2) | 2024.01.26 |
LCS (Longest Common Subsequence) (2) | 2024.01.25 |