알고리즘 공부/BOJ백준 풀이

    [백준 10866번-C++] 덱

    http://acmicpc.net/problem/10866 {코드} #include #include using namespace std; int main(void) { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, tmp; deque dq; string op; cin >> n; while (n--) { cin >> op; if (op == "push_front") { cin >> tmp; dq.push_front(tmp); } else if (op == "push_back") { cin >> tmp; dq.push_back(tmp); } else if (op == "pop_front") { if (dq.empty()) cout

    [백준 10845번-C++] 큐

    http://acmicpc.net/problem/10845 {코드} #include #include #include using namespace std; int main() { queue q; string ip; int tmp, n; scanf("%d", &n); while (n--) { cin >> ip; if (ip == "pop") { if (!q.empty()) { printf("%d\n", q.front()); q.pop(); } else { printf("-1\n"); } } else if (ip == "size") { printf("%d\n", q.size()); } else if (ip == "empty") { if (!q.empty()) { printf("0\n"); } else { pr..

    [백준 1158번-C++] 요세푸스 문제

    http://acmicpc.net/problem/1158 {코드} #include #include using namespace std; int main() { int n, k, tmp; scanf("%d %d", &n, &k); queue q; for (int i = 1; i

    [백준 1406번-C++] 에디터

    http://acmicpc.net/problem/1406 {코드} #include #include #include using namespace std; int main(){ int n; string s; cin >> s; cin >> n; list l(s.begin(),s.end()); auto now = l.end(); while(n--){ char tmp; cin >> tmp; if(tmp == 'L'){ if(now != l.begin()){ now--; } } else if(tmp == 'D'){ if(now != l.end()){ now++; } } else if(tmp == 'B'){ if(now != l.begin()){ now = l.erase(--now); } } else if(tmp =..

    [백준 1874번-C++] 스택 수열

    http://acmicpc.net/problem/1874 {코드} #include #include using namespace std; int main() { int n, num, cur = 1; stack s; string ans = ""; scanf("%d", &n); for (int i = 0; i = cur) { while (num + 1 != cur) { s.push(cur++); ans += "+\n"; } s.pop(); ans += "-\n"; } else { if (s.top() == num) { s.pop(); ans += "-\n"; } else { ans = "NO"; break; } } } cout

    [백준 20191번-C++] 줄임말

    http://acmicpc.net/problem/20191 {코드} #include #include #include using namespace std; int solution() { string S, T; cin >> S; cin >> T; vector next(26); for (int i = 0; i < T.length(); i++) { next[T[i]-'a'].push_back(i); } int chkCnt = 0, chkIdx; for (int i = 0; i < 26; i++) { if (!next[i].empty()) {chkCnt++; chkIdx = i;} } if (chkCnt == 1 && T[chkIdx] == S[0]) return (S.length()+T.length()-1)/T..

    [백준 17609번-C++] 회문

    http://acmicpc.net/problem/17609 {코드} #include #include using namespace std; string s; int isPalindrome(int left, int right, bool testPseudo) { while (left < right) { if (s[left] != s[right]) { if (testPseudo) { if (isPalindrome(left+1, right, false) == 0 || isPalindrome(left, right-1, false) == 0) return 1; } return 2; } left++; right--; } return 0; } int main() { ios_base::sync_with_stdio(fals..

    [백준 17608번-C++] 막대기

    http://acmicpc.net/problem/17608 {코드} #include using namespace std; int main() { int rods[100001], n; scanf("%d", &n); for (int i=0; i=0; i--) { if (max < rods[i]) { max = rods[i]; cnt++; } } printf("%d\n", cnt); } {설명} 이 문제에서는 모든 막대기를 일렬로 나열한 후 오른쪽에서 보기 때문에 어떤 막대기는 오른쪽에 있는 모든 막대기보다 크면 보이게 되는 것입니다. 우선, 가장 오른쪽의 막대기, 즉, 마지막 인덱스의 막대기는 무조건 보이므로 이를 max값으로 잡고 왼쪽으로 하나씩 이동하며 만약 이 max값보다 막대기의 길이가 더 크면 ma..

    [백준 9012번-C++] 괄호

    http://acmicpc.net/problem/9012 {코드} #include #include #include using namespace std; int main() { int n; string s, ans = ""; stack st; cin >> n; while (n--) { cin >> s; stack st; for (const char &c : s) { if (c == '(') { st.push(c); } else { if (!st.empty()) { st.pop(); } else { st.push('('); break; } } } if (!st.empty()) { ans += "NO\n"; } else { ans += "YES\n"; } } cout

    [백준 9093번-C++/파이썬] 단어 뒤집기

    http://acmicpc.net/problem/9093 {코드} #include #include #include using namespace std; int main() { int n; string s; stack st; cin >> n; cin.ignore(); while (n--) { getline(cin, s); s += ' '; for (const char&c : s) { if (c == ' ') { while (!st.empty()) { cout