BOJ 10101번 삼각형 외우기 문제

세 각이 같을 때 체크, 세 각의 합이 180일때 체크, 180을 넘을 떄 체크를 한다.

180일 때 세각이 모두 다른 경우와 그렇지 않은 경우를 체크한다.

10101.cpp

#include <bits/stdc++.h>
using namespace std;
int main() {
    int a, b, c;
    cin >> a >> b >> c;
    if (a == 60 && a == b && b == c) {
        cout << "Equilateral";
    } else if (a + b + c == 180) {
        if (a != b && b != c && c != a) {
            cout << "Scalene";
        } else {
            cout << "Isosceles";
        }
    } else {
        cout << "Error";
    }
}

BOJ 2443번 별찍기 - 6 문제

백준에 별찍기 쉬운거는 다 푼지 알았는데 안 푼 문제가 있어서 오랜만에 별찍기 문제를 풀어봤다.

내가 기억하기로는 별 뒤에 있는 공백도 출력해야하는 걸로 알고 있었는데 출력하니까 출력 오류가 났다.

그 부분만 주의하면 될 것 같다.

2443.cpp

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < i; j++) {
            cout << " ";
        }
        for (int j = 2 * n - 2 * i - 1; j > 0; j--) {
            cout << "*";
        }
        cout << '\n';
    }
}

BOJ 2251번 물통 문제

BFS로 풀었다.

C에서 B, A로 담는 경우, B에서 A, C로 담는 경우, A에서 B, C로 주는 경우를 고려하면 된다.

물통이 용량을 모두 수용할 수 있는지 여부를 체크해줘야 한다.

항상 이런거 짤때 실수를 해서 고치느라 애먹었다.

답을 출력할 때 중복 값이 나와서 set에 담아서 출력했다.

2251.cpp

#include <bits/stdc++.h>
using namespace std;
bool visited[201][201][201];
struct Water {
    int a;
    int b;
    int c;
};
int main() {
    int A, B, C;
    cin >> A >> B >> C;
    set<int> ans;
    queue<Water> q;
    q.push({0, 0, C});

    while (!q.empty()) {
        int nowA = q.front().a;
        int nowB = q.front().b;
        int nowC = q.front().c;
        q.pop();
        if (visited[nowA][nowB][nowC])
            continue;
        visited[nowA][nowB][nowC] = true;
        // A가 0일때의 C의 용량을 담는다.
        if (nowA == 0) {
            //ans.push_back(nowC);
            ans.insert(nowC);
        }
        // case 1) C->B
        if (nowB + nowC > B) {
            q.push({nowA, B, nowB + nowC - B});
        } else {
            q.push({nowA, nowB + nowC, 0});
        }
        // case 2) C->A
        if (nowA + nowC > A) {
            q.push({A, nowB, nowA + nowC - A});
        } else {
            q.push({nowA + nowC, nowB, 0});
        }
        // case 3) B->A
        if (nowA + nowB > A) {
            q.push({A, nowA + nowB - A, nowC});
        } else {
            q.push({nowA + nowB, 0, nowC});
        }
        // case 4) B->C
        if (nowB + nowC > C) {
            q.push({nowA, nowB + nowC - C, C});
        } else {
            q.push({nowA, 0, nowB + nowC});
        }
        // case 5) A->B
        if (nowA + nowB > B) {
            q.push({nowA + nowB - B, B, nowC});
        } else {
            q.push({0, nowA + nowB, nowC});
        }
        // case 6) A->C
        if (nowA + nowC > C) {
            q.push({nowA + nowC - C, nowB, C});
        } else {
            q.push({0, nowB, nowA + nowC});
        }
    }
    set<int>::iterator iter;
    for (iter = ans.begin(); iter != ans.end(); iter++) {
        cout << *iter << " ";
    }
}

BOJ 16205번 변수명 문제

문자열 처리하는 문젠데 bool을 초기화 안했다.

16205.cpp

#include <bits/stdc++.h>
using namespace std;
int main() {
    int c;
    cin >> c;
    string input;
    cin >> input;
    string camel, snake, pascal;
    if (c == 1) {
        string camel, snake, pascal;
        camel = input;
        snake = "";
        for (int i = 0; i < input.size(); i++) {
            if (input[i] >= 'a' && input[i] <= 'z') {
                snake += input[i];
            } else {
                snake += "_";
                char big = (input[i] + 32);
                snake += big;
            }
        }
        pascal = input;
        pascal[0] -= 32;
        cout << camel << '\n'
             << snake << '\n'
             << pascal;
    }
    if (c == 2) {
        bool big = false;
        for (int i = 0; i < input.size(); i++) {
            if (input[i] == '_') {
                big = true;
                continue;
            } else if (big) {
                camel += (input[i] - 32);
                big = false;
            } else {
                camel += input[i];
            }
        }
        snake = input;
        pascal = camel;
        pascal[0] -= 32;
        cout << camel << '\n'
             << snake << '\n'
             << pascal;
    }
    if (c == 3) {
        camel = input;
        camel[0] += 32;
        snake = "";
        for (int i = 0; i < input.size(); i++) {
            if (i == 0) {
                snake += (input[i] + 32);

            } else if (input[i] >= 'a' && input[i] <= 'z') {
                snake += input[i];
            } else {
                snake += "_";
                char bg = (input[i] + 32);
                snake += bg;
            }
        }
        pascal = input;
        cout << camel << '\n'
             << snake << '\n'
             << pascal;
    }
}

BOJ 2845번 파티가 끝나고 난 뒤 문제

사람 수 * 넓이를 구하고 기사에 난 수에서 뺀다.

쉬워서 안올리려고 했는데 5번 입력 받는거를 모르고 사람 수만큼 입력받는 줄 알고 틀렸다.

그래서 올렸다..

2845.cpp

#include <bits/stdc++.h>
using namespace std;
int a[11];
int main() {
    int L, P;
    cin >> L >> P;
    int people = L * P;
    for (int i = 0; i < 5; i++) {
        cin >> a[i];
        a[i] -= people;
        cout << a[i] << ' ';
    }
}

'알고리즘 & SQL > 백준(BOJ)' 카테고리의 다른 글

백준 2251번 : 물통 C++  (0) 2018.11.10
백준 16205번 : 변수명 C++  (0) 2018.11.09
백준 2935번 : 소음 C++  (0) 2018.11.09
백준 2583번 : 영역 구하기 C++  (0) 2018.11.07
백준 1697번 : 숨바꼭질 C++  (0) 2018.11.06

+ Recent posts