Algorithm 100

[백준] 4949 균형잡힌 세상 with C++

문제설명 입출력 예제 개념 주어진 문자열에서 괄호만 추출해서 소괄호와 중괄호가 알맞게 짝을 이루고 있는지 확인하는 문제다. 괄호는 스택으로 처리하면 편하게 해결할 수 있지만, 문자열의 종료 시점을 정하는 게 까다로웠다. 필자는 문자열에서 온점을 찾고, 그 문자열의 크기가 1일 때를 종료 시점으로 정했다. 풀이 #include #include #include using namespace std; int main() { while (true) { string str; stack st; getline(cin, str); if (str.find(".") != string::npos && str.size() == 1) break; 문자열 str을 공백을 포함하여 입력받고, 종료 시점인지 판단한다. else if ..

Algorithm/백준 2023.05.11

[백준] 10773 제로 with C++

문제설명 입출력 예제 개념 잘못 부른 수를 0으로 지우고, 마지막의 수의 합을 출력하므로 스택의 개념을 이용하면 쉽게 풀 수 있다. 즉, 0을 입력받는 순간 스택에서 하나를 뽑으면 된다. 풀이 #include #include int main() { int K, n, sum = 0; std::cin >> K; std::stack st; while (K--) { std::cin >> n; if (n == 0) st.pop(); else st.push(n); } while (!st.empty()) { sum += st.top(); st.pop(); } std::cout

Algorithm/백준 2023.05.09

[백준] 10828 스택 with C++

문제설명 입출력 예제 개념 기본적인 스택을 잘 이해하고 있는지 확인하는 문제다. 입력받은 문자열에 맞게 스택의 동작을 수행하게끔 작성하면 쉽게 해결할 수 있다. 풀이 #include #include int main() { std::stack st; int N, n; std::cin >> N; while (N--) { std::string str; std::cin >> str; if (str == "push") { std::cin >> n; st.push(n); } else if (str == "top") { if (!st.empty()) std::cout

Algorithm/백준 2023.05.08

[백준] 1010 다리 놓기 with C++

문제설명 입출력 예제 개념 경우의 수를 계산하는 문제다. 이때 순서에 상관없이 N개의 다리와 M개의 다리를 이으면 되므로, 조합의 개념을 이용하면 쉽게 해결할 수 있다. 풀이 #include #include int main() { int T, N, M; std::cin >> T; while (T--) { std::cin >> N >> M; std::cout M; std::cout T; while (T--) { result = 1; tmp = 1; cin >> M >> N; for (int i = N; i > N - M; --i) { result *= i; result /= tmp++; } cout

Algorithm/백준 2023.05.06

[백준] 20920 영단어 암기는 괴로워 with C++

문제설명 입출력 예제 개념 주어진 문자열을 빈도수 → 길이순 → 알파벳 순으로 정렬하는 문제다. 자료구조 맵을 이용해 특정 길이 이상의 문자열을 빈도수와 함께 컨테이너에 저장한 후, 주어진 조건에 맞게 정렬하면 문제를 해결할 수 있다. 풀이 #include #include #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N, M; string str; map m; cin >> N >> M; 영단어의 개수 N, 외울 단어의 길이 기준 M, 영단어 문자열 str, 단어를 저장할 컨테이너 m을 초기화한다. while (N--) { cin >> str; if (str.size(..

Algorithm/백준 2023.05.05

[백준] 2108 통계학 with C++

문제설명 입출력 예제 개념 다양한 수를 처리하는 문제다. 산술 평균, 중앙값, 범위는 간단하게 해결할 수 있지만, 최빈값을 처리하는 과정이 까다롭고, 시간 초과에 자주 걸리므로 알고리즘 최적화를 잘해야 한다. 풀이 #include #include #include #include #include using namespace std; int main() { int N, sum = 0; cin >> N; vector v(N); unordered_map freq; 수의 개수 N, 산술 평균을 계산하기 위한 sum, 중앙값과 범위를 계산하기 위한 벡터 v, 최빈값을 계산하기 위한 해시맵 freq를 초기화한다. for (int i = 0; i > v[i]; sum += v[i]; fr..

Algorithm/백준 2023.05.04

[백준] 26069 붙임성 좋은 총총이 with C++

문제설명 입출력 예제 개념 ChongChong과 만난 사람은 무지개 댄스를 추게 되므로, key로 아이디를 갖고 value로 무지개 댄스 여부를 확인할 수 있는 map 자료구조를 사용하면 쉽게 풀 수 있다. 즉, 문자열을 검사해 총총이를 만났으면 value값을 true로 바꾸면 된다. 풀이 #include #include using namespace std; int main() { int N, count = 0; cin >> N; map m; string str1, str2; 사람들이 만난 기록의 수 N, 무지개 댄스를 추는 사람의 수 count, 이러한 정보를 기록할 맵 자료구조 m, 사람들의 이름을 초기화할 문자열 str1, str2을 초기화한다. while (N--) { cin >> str1 >> ..

Algorithm/백준 2023.05.03

[백준] 25192 인사성 밝은 곰곰이 with C++

문제설명 입출력 예제 개념 엔터가 입력되고 난 후 들어온 사람의 숫자를 계산하는 문제다. enter가 입력되고 나서 중복되지 않은 사람의 수를 카운트하면 되므로, 자료구조 set을 이용하면 쉽게 풀 수 있다. 풀이 #include #include using namespace std; int main() { int N, count = 0; cin >> N; set m; string str; 채팅방의 기록 수 N, 곰곰티콘이 사용된 횟수 count, 집합 m, 유저 str을 초기화한다. while (N--) { cin >> str; if (str == "ENTER") { count += m.size(); m.clear(); continue; } m.insert(str); } count += m.size();..

Algorithm/백준 2023.05.02

[백준] 13909 창문 닫기 with C++

문제설명 입출력 예제 개념 N번 째 창문이 열려 있으려면, 열고 닫은 횟수가 홀수번이어야 한다. 따라서 N의 약수의 개수가 홀수개여야 하고, 이런 특성을 만족하는 것은 제곱수다. 약수는 두 수가 짝을 이루어 곱해지므로 자연수의 약수의 개수는 짝수지만, 제곱수는 자기 자신을 곱하는 수가 추가되므로 홀수가 된다. 따라서 주어진 범위 내의 제곱수의 개수를 구하면 문제를 해결할 수 있다. 풀이 #include int main() { int N, count = 0; std::cin >> N; for(int i = 1; i * i

Algorithm/백준 2023.05.01