BOJ 9414번 프로그래밍 대회 전용 부지 문제

크리스마스 기념 꿀잼꿀문입니다. 왜 틀렸는지 모르겠는데 3번이나 틀렸습니다. 왜 틀렸을까요 로직이 다 같았는데.. long long 으로 바꾼 뒤 맞은거 같네요.

9414.cpp

#include <bits/stdc++.h>
using namespace std;

long long power(int n, int x) {
    int result = 1;
    for (int i = 0; i < x; i++) {
        result *= n;
    }
    return result;
}

void solve() {
    int n;
    long long sum = 0;
    int size = 0;
    vector<int> v;
    while (true) {
        cin >> n;
        v.push_back(n);
        size++;
        if (n == 0) {
            break;
        }
    }
    sort(v.begin(), v.end());
    reverse(v.begin(), v.end());
    // 역순으로 정렬해서 비싼 땅을 먼저 산다.
    for (int i = 0; i < size; i++) {
        sum += 2 * (long long)power(v[i], i + 1);
    }
    if (sum >= 5000000) {
        cout << "Too expensive" << '\n';
    } else {
        cout << sum << '\n';
    }
}

int main() {
    int test;
    cin >> test;
    while (test--) {
        solve();
    }
}

BOJ 2872번 우리집엔 도서관이 있어 문제

우리 학교, hi-arc 학회 갓 연두님의 꿀잼꿀문으로 추천받아서 풀었다.

제자리에 없으면 답을 1씩 증가시킨다. 제자리에 있으면 check 값을 1씩 줄여가며 비교한다.

2872.cpp

#include <bits/stdc++.h>
using namespace std;
int book[300001];
int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++){
        cin >> book[i];
    }
    int checkingNum = n;
    int ans = 0;
    for (int i = n - 1; i >= 0; i--) {
        if (book[i] == checkingNum) {
            checkingNum--;
        }
        else{
            ans++;
        }
    }
    cout << ans;
    return 0;
}

BOJ 2752번 세수정렬 문제

sort 쓰면 쉽게 풀 수 있다.

2752.cpp

#include <bits/stdc++.h>
using namespace std;

int arr[3];

int main() {
    int input;
    for (int i = 0; i < 3; i++) {
        cin >> input;
        arr[i] = input;
    }
    sort(arr, arr + 3);
    for (int i = 0; i < 3; i++)
        cout << arr[i] << ' ';
}

BOJ 2864번 5와 6의 차이 문제

5는 모두 6으로 바꿨을때, 6은 모두 5로 바꿨을때를 만들어서 합을 출력하면 된다.

2864.cpp

#include <bits/stdc++.h>
using namespace std;

int main() {
    string s1, s2;
    cin >> s1 >> s2;
    int s1_size = s1.size();
    int s2_size = s2.size();

    for (int i = 0; i < s1_size; i++) {
        if (s1[i] == '6') s1[i] = '5';
    }
    for (int i = 0; i < s2_size; i++) {
        if (s2[i] == '6') s2[i] = '5';
    }
    cout << stoi(s1) + stoi(s2) << ' ';

    for (int i = 0; i < s1_size; i++) {
        if (s1[i] == '5') s1[i] = '6';
    }
    for (int i = 0; i < s2_size; i++) {
        if (s2[i] == '5') s2[i] = '6';
    }
    cout << stoi(s1) + stoi(s2);
}

BOJ 3052번 나머지 문제

나머지를 체크하는 bool 배열[42]을 만들어서 true의 개수를 센다.

3052.cpp

#include <bits/stdc++.h>
using namespace std;

bool check[42];

int main() {
    int n = 10;
    while (n--) {
        int input;
        cin >> input;
        check[input % 42] = true;
    }
    int result = 0;
    for (int i = 0; i < 42; i++) {
        if (check[i]) {
            result++;
        }
    }
    cout << result;
}

BOJ 9085번 더하기 문제

그냥 n개를 덧셈을 해서 출력하면 된다.

9085.cpp

#include <bits/stdc++.h>
using namespace std;

void solve() {
    int n;
    int result = 0;
    cin >> n;
    while (n--) {
        int plus;
        cin >> plus;
        result += plus;
    }
    cout << result << '\n';
}

int main() {
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
}

BOJ 1547번 공 문제

1을 true로 해놓고 바뀔때마다 바뀌는 것끼리 swap해주면 풀 수 있다.

1547.cpp

#include <bits/stdc++.h>
using namespace std;

bool ball[4];

int main() {
    int n;
    cin >> n;
    ball[1] = true;
    while (n--) {
        int one, two;
        cin >> one >> two;
        swap(ball[one], ball[two]);
    }
    for (int i = 1; i <= 3; i++) {
        if (ball[i]) {
            cout << i;
            return 0;
        }
    }
    cout << "-1";
    return 0;
}

+ Recent posts