반응형
# 20. Valid Parentheses
괄호로 이루어진 문자열이 주어졌을 때, 이 문자열의 괄호 구조가 적절한 지 확인하는 문제
이 문제는 단순히 스택을 활용해서 여는 괄호면 push, 닫는 괄호면 pop 해서 확인하는 방식으로 문제를 해결했다.
bool isValid(string s) {
stack<char> st;
for (auto c : s) {
if (c == '(' || c == '[' || c == '{')
st.push(c);
else {
if (st.empty())
return false;
switch (c) {
case ')':
if (st.top() != '(')
return false;
break;
case ']':
if (st.top() != '[')
return false;
break;
case '}':
if (st.top() != '{')
return false;
break;
}
st.pop();
}
}
if (!st.empty())
return false;
return true;
}
# 21. Merge Two Sorted Lists
정렬된 두 리스트가 주어졌을 때, 정렬을 유지한 상태로 두 리스트를 하나로 합치는 문제
간단하게 Two Pointer 사용해서 순서대로 비교하고, 하나의 리스트로 합치도록 만들었다.
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode dummyHead = ListNode(0);
ListNode *tmp = &dummyHead;
while (l1 != nullptr || l2 != nullptr) {
if (l1 == nullptr) {
tmp->next = l2;
tmp = tmp->next;
l2 = l2->next;
}
else if (l2 == nullptr) {
tmp->next = l1;
tmp = tmp->next;
l1 = l1->next;
}
else {
if (l1->val < l2->val) {
tmp->next = l1;
tmp = tmp->next;
l1 = l1->next;
}
else {
tmp->next = l2;
tmp = tmp->next;
l2 = l2->next;
}
}
}
return dummyHead.next;
}
# 22. Generate Parentheses
Parentheses 쌍의 개수 n 이 주어졌을 때, 가능한 괄호 "()" 쌍의 조합을 모두 구하는 문제
주어진 n 개의 여는 괄호 / 닫는 괄호의 가능한 모든 조합을 그냥 Recursive 함수로 찾도록 구현
사용된 여는 괄호 개수만큼만 닫는 괄호를 사용할 수 있도록 해 불가능한 괄호 조합은 만들지 않도록 했다.
vector<string> generateParenthesis(int n) {
vector<string> ans;
recursiveGenerate(ans, "", n, n);
return ans;
}
void recursiveGenerate(vector<string>& v, string s, int l, int r) {
if (l == 0 && r == 0) {
v.push_back(s);
return;
}
if (l > 0) {
recursiveGenerate(v, s + "(", l - 1, r);
}
if (r > l) {
recursiveGenerate(v, s + ")", l, r - 1);
}
}
'Algorithm > LeetCode' 카테고리의 다른 글
[LeetCode # 26 ~ 28] 문제 풀이 (0) | 2021.03.19 |
---|---|
[LeetCode # 23 ~ 24] 문제 풀이 (0) | 2021.03.19 |
[LeetCode # 17 ~ 19] 문제 풀이 (0) | 2021.03.18 |
[LeetCode # 14 ~ 16] 문제 풀이 (0) | 2021.03.09 |
[LeetCode # 11 ~ 13] 문제 풀이 (0) | 2021.02.28 |