※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 33169번 문제인 所持金 (Money On Me)이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/33169

 

1000엔 지폐 \(A\)장은 \(1000A\)엔의 가치와 같고 10000엔 지폐 \(B\)장은 \(10000B\)엔의 가치와 같다. 따라서 비타로가 가진 총 액수는 위의 두 값의 합인 \(1000A+10000B\)와 같다.

 

위의 값을 출력하여 문제를 해결하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int A, B;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> A >> B;
    cout << A * 1000 + B * 10000;
}
728x90

※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 33168번 문제인 三角足し算 (Triangle Addition)이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/33168

 

주어진 계산 방법을 따라서 이차원 배열의 삼각형 모양 영역을 채우는 것으로 문제를 해결할 수 있다. 이는 이차원 배열과 반복문을 이용해 구현해낼 수 있다.

 

또는 한 행의 계산이 끝나고 그 행의 값을 출력하면 그 행의 값을 마지막까지 보관하고 있을 필요가 없다는 점을 이용하여 아래의 코드와 같이 일차원 배열만으로도 해결할 수도 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int N;
int A[10];

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> N;
    for (int i = 0; i < N; i++) cin >> A[i];
    for (int k = N - 1; k > 0; k--) {
        for (int i = 0; i < k; i++) {
            cout << (A[i] += A[i + 1]) << ' ';
        }
        cout << '\n';
    }
}
728x90

※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 33164번 문제인 じゃんけん (Rock-Scissors-Paper)이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/33167

 

두 사람이 차례대로 낸 것이 무엇인지를 먼저 저장해 두자. 그리고 각 차례에 서로 낸 것을 비교하여 누가 이겼는지를 판단하고, 그에 따라 각 사람의 이긴 횟수를 세어주자.

 

승리를 판단하는 것은 조건문 6개를 이용하거나 아래의 구현과 같이 배열을 이용하는 방법 등 다양하게 해낼 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int N, cnt1, cnt2;
string A, B;
int X[128][128];

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    X['R']['P'] = X['P']['S'] = X['S']['R'] = 1;
    X['P']['R'] = X['S']['P'] = X['R']['S'] = -1;
    cin >> N >> A >> B;
    for (int i = 0; i < N; i++) {
        if (X[A[i]][B[i]] < 0) cnt1++;
        else if (X[A[i]][B[i]] > 0) cnt2++;
    }

    cout << cnt1 << ' ' << cnt2;
}
728x90

※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 33164번 문제인 鉄道旅行 3 (Railway Trip 3)이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/33166

 

총 여행 거리가 \(P\)km 이하인 경우와 초과인 경우를 나누어 생각해보자.

 

\(P\)km 이하인 경우의 요금은 이동 거리 \(Q\)와 단위 요금 \(A\)를 곱한 값이 문제의 답이 될 것이다.

 

또한 \(P\)km 초과인 경우의 요금은 앞선 \(P\)km만큼의 요금 \(PA\)와 남은 거리\(Q-P\)만큼의 요금 \((Q-P)B\)의 합으로 요금을 구할 수 있다.

 

위 내용을 조건문을 이용하여 구현해 문제를 해결하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int P, Q, A, B;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> P >> Q >> A >> B;
    if (P < Q) cout << P * A + (Q - P) * B;
    else cout << Q * A;
}
728x90

※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 33164번 문제인 徒競走 (Footrace)이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/33165

 

속력과 이동 시간이 주어질 때 이동 거리의 값을 계산하는 문제이다.

 

이동 거리는 속력과 이동 시간을 곱해 구할 수 있으므로, 주어지는 두 정수의 곱을 출력해 문제를 해결하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int A, B;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> A >> B;
    cout << A * B;
}
728x90

※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 33164번 문제인 どら焼き (Dorayaki)이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/33164

 

각 도라야끼에 대하여 맛을 계산하는 데에는 \(O(1)\)의 연산이 필요하므로 모든 도라야끼의 맛을 하나하나 구하는 것은 \(O(NM)\)의 시간복잡도로 해낼 수 있다. 또한 \(NM\)은 10000 이하이므로 가능한 모든 도라야끼에 대하여 각 도라야끼의 맛을 더하는 것으로도 문제를 충분히 해결할 수 있음을 관찰할 수 있다.

 

위 내용을 반복문 등으로 단순히 구현하여 문제를 해결하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int N, M, ans;
int A[100], B[100];

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> N >> M;
    for (int i = 0; i < N; i++) cin >> A[i];
    for (int i = 0; i < M; i++) cin >> B[i];

    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            ans += (A[i] + B[j]) * max(A[i], B[j]);
        }
    }

    cout << ans;
}
728x90

+ Recent posts