알고리즘 공부
[백준 19941번-파이썬] 햄버거 분배
http://acmicpc.net/problem/19941 {코드} n, k = map(int, input().split()) placement = list(input()) ans = 0 for idx in range(n): if placement[idx] == 'P': for i in range(max(idx-k, 0), min(idx+k+1, n)): if placement[i] == 'H': placement[i] = 0 ans += 1 break print(ans) {설명} 이 문제는 간단히 사람의 위치에서 양쪽으로 k의 범위(±k)에서 가장 왼쪽에 있는 햄버거를 고르면 되는 문제입니다. 가장 왼쪽을 고르는 이유는 맨 마지막 위치에 사람이 있다면 그 사람은 왼쪽에서만 햄버거를 찾아야하기 때문에 최..
[백준 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
[알고리즘&자료구조] 큐 - C++/파이썬
큐란? 원소가 넣은 순서대로 나오는 자료구조(First in First out-FIFO) 위 그림처럼 1->2->3의 순서로 들어가면 1->2->3의 순서로 나온다. 큐는 대기줄을 생각하면 되는데 예를 들어 게임 접속 대기열을 큐라고 하는 것을 떠올리면 된다. *큐는 맨 앞과 맨 뒤의 원소들만 고려하기 때문에 나머지 원소들에 대해서는 알 수 없다. 큐 메소드 큐의 메소드로 다음과 같은 것들이 있다: front - 맨 앞의 원소 반환 back - 맨 뒤의 원소 반환 empty - 큐가 비어있는지 확인: 비어있으면 0 아니면 1 pop - 맨 앞의 원소 삭제 push - 맨 뒤에 원소 삽입 size - 큐의 길이 반환 언어마다 차이가 있을 수 있으나 위 메소드들은 거의 필수적으로 있다고 봐도 무방하다. 스택..
[알고리즘&자료구조] 스택 - C++/파이썬
스택이란? 먼저 들어간 원소가 나중에 나오는 자료구조(Last in First out-LIFO) 위의 그림과 같이 1->2->3의 순서로 들어가지만 나올 때는 3->2->1의 순서로 나온다. 스택을 생각할 때 엘레베이터를 생각하면 먼저 들어간 사람이 뒤로 가게 되고 마지막에 들어온 사람이 문과 가장 가까이 서게 된다고 생각하면 된다. 아니면 뚜껑이 위에 하나만 있는 용기도 마지막에 넣은 것들이 가장 먼저 나오게 된다. *스택은 맨 위의 원소만을 고려하기 때문에 그 외의 다른 원소들은 맨 위로 오기 전까지는 그 값을 알 수 없다. 스택 메소드 스택의 메소드로는 다음과 같은 것들이 있다: pop - 스택의 맨 위에 있는(마지막으로 들어온) 원소를 삭제함 push - 스택에 새로운 원소를 추가함 isEmpty..
[백준 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..