BOJ 14753번 MultiMax 문제

작년 ACM-ICPC 인터넷 예선 문제였다. 올해 ICPC 본선 예비소집 B번 문제로 나왔다.

오름차순으로 정렬을 하고 맨 뒤 가장 큰 숫자 두 개를 골라 곱한 수와 세 개를 골라 곱한 수 중 큰 값을 일단 max로 갖고 있는다.

음수가 두 개 이상 나오는 경우 맨 앞 [0] [1]을 곱한 수도 양수이기 때문에 이 둘을 곱한 수와 현재 max 중 큰 값을 갖고 있는다.

또 위 음수를 곱한 수와 양수로 가장 큰 수 [size-1]를 곱한 수랑 현재 max를 비교해서 더 높은 값을 출력하면 된다.

14753.cpp

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin >> n;
    vector<int> v;
    for (int i = 0; i < n; i++) {
        int input;
        cin >> input;
        v.push_back(input);
    }
    sort(v.begin(), v.end());
    int result = max(v[n - 1] * v[n - 2], v[n - 1] * v[n - 2] * v[n - 3]);
    if (v[0] * v[1] > 0) {
        result = max(v[0] * v[1], result);
        result = max(v[0] * v[1] * v[n - 1], result);
    }
    cout << result;
}

BOJ 9086번 문자열 문제

string을 입력받아서 맨 앞자리와 맨 끝자리를 출력하면 된다.

끝자리 출력할 때 인덱스 부분 설정에만 주의하면 된다.

9086.cpp

#include <bits/stdc++.h>
using namespace std;
int main() {
    string s;
    int n;
    cin >> n;
    while (n--) {
        cin >> s;
        int end = s.size();
        cout << s[0] << s[end - 1] << '\n';
    }
}

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

백준 16360번 : Go Latin C++  (0) 2018.11.04
백준 14753번 : MultiMax C++  (0) 2018.11.02
백준 1427번 : 소트인사이드 C++  (0) 2018.11.02
백준 2851번 : 슈퍼 마리오 C++  (1) 2018.11.02
백준 2998번 : 8진수 C++  (0) 2018.10.31

BOJ 1427번 소트인사이드 문제

sort를 사용해서 쉽게 풀 수 있는 문제였다.

그냥 쓸 줄만 알면 풀수 있다.

1427.cpp

#include <bits/stdc++.h>
using namespace std;
int main() {
    string s;
    cin >> s;
    sort(s.begin(), s.end());
    reverse(s.begin(), s.end());
    cout << s;
}

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

백준 14753번 : MultiMax C++  (0) 2018.11.02
백준 9086번 : 문자열 C++  (0) 2018.11.02
백준 2851번 : 슈퍼 마리오 C++  (1) 2018.11.02
백준 2998번 : 8진수 C++  (0) 2018.10.31
백준 10987번 : 단위 C++  (0) 2018.10.30

BOJ 2851번 슈퍼마리오 문제

특별한 알고리즘이 필요한게 아닌 구현 문제이다.

첫번째 버섯부터 무조건 먹는건데 중간에 왜 갑자기 생각을 잘못했는지 중간부터 먹을 수 있게 구현해서 계속 틀려버렸다.

일단 배열에 10개 입력을 받는다.

하나 하나 더해가면서, 100이 넘는 경우에 100에 더하기 전이 가까운지 더한 후가 가까운지 조건을 주고 더 작은 값을 출력한다. 만약 같다면 더한 숫자를 골라야한다.

2851.cpp

#include <iostream>
using namespace std;
int main() {
    int a[10];
    for (int i = 0; i < 10; i++) {
        cin >> a[i];
    }
    int sum = 0;
    for (int i = 0; i < 10; i++) {
        int afterSum = sum + a[i];
        if (afterSum >= 100) {
            if (afterSum - 100 <= 100 - sum) {
                cout << afterSum;
            } else {
                cout << sum;
            }
            return 0;
        }
        sum = afterSum;
    }
    cout << sum;
}

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

백준 14753번 : MultiMax C++  (0) 2018.11.02
백준 9086번 : 문자열 C++  (0) 2018.11.02
백준 1427번 : 소트인사이드 C++  (0) 2018.11.02
백준 2998번 : 8진수 C++  (0) 2018.10.31
백준 10987번 : 단위 C++  (0) 2018.10.30

BOJ 2998번 8진수 문제

2진수를 8진수로 고치는 문제다.

2진수 글자 수가 3의 배수가 아니면 앞에 0을 붙인다.

3글자씩 봐서 000일 경우 0, 001일 경우 1, 010일 경우 2 ... 를 결과 string에 넣고 출력하는 간단한 문제였다.

한번 제출에서 틀렸는데, 111 같이 처음부터 길이가 3의 배수일때 07로 출력을 하는 경우 때문이였다.

그래서 if문으로 3의 배수가 아닐때만 앞에 0을 붙이게 하고 제출했다.

2998.cpp

#include <iostream>
#include <string>
using namespace std;

char check(char, char, char);

int main() {
    string si;
    cin >> si;
    int stringSize = si.size();
    if (stringSize % 3 != 0) {
        int threeRemainder = stringSize % 3;
        int plus = 3 - threeRemainder;
        for (int i = 0; i < plus; i++) {
            si = "0" + si;
        }
    }
    int howmany = si.size() / 3;
    string result;
    for (int i = 0; i < howmany; i++) {
        result[i] = check(si[3 * i], si[3 * i + 1], si[3 * i + 2]);
        cout << check(si[3 * i], si[3 * i + 1], si[3 * i + 2]);
    }
}

char check(char one, char two, char three) {
    if (one == '0' && two == '0' && three == '0') {
        return '0';
    }
    if (one == '0' && two == '0' && three == '1') {
        return '1';
    }
    if (one == '0' && two == '1' && three == '0') {
        return '2';
    }
    if (one == '0' && two == '1' && three == '1') {
        return '3';
    }
    if (one == '1' && two == '0' && three == '0') {
        return '4';
    }
    if (one == '1' && two == '0' && three == '1') {
        return '5';
    }
    if (one == '1' && two == '1' && three == '0') {
        return '6';
    }
    if (one == '1' && two == '1' && three == '1') {
        return '7';
    }
}

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

백준 14753번 : MultiMax C++  (0) 2018.11.02
백준 9086번 : 문자열 C++  (0) 2018.11.02
백준 1427번 : 소트인사이드 C++  (0) 2018.11.02
백준 2851번 : 슈퍼 마리오 C++  (1) 2018.11.02
백준 10987번 : 단위 C++  (0) 2018.10.30

BOJ 10987번 단위 문제

문자열에 관한 간단한 문제다.

string을 입력받고 인덱스로 한글자씩 살피면서 'a' 'e' 'i' 'o' 'u'이면 count값을 1씩 증가시킨다.

모두 살핀 다음 출력하면 된다.

10987.cpp

#include <iostream>
using namespace std;

bool check(char c) {
    if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
        return true;
    }
    return false;
}

int main() {
    string s;
    cin >> s;
    int stringSize = s.size();
    int count = 0;
    for (int i = 0; i < stringSize; i++) {
        if (check(s[i])) {
            count++;
        }
    }
    cout << count;
}

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

백준 14753번 : MultiMax C++  (0) 2018.11.02
백준 9086번 : 문자열 C++  (0) 2018.11.02
백준 1427번 : 소트인사이드 C++  (0) 2018.11.02
백준 2851번 : 슈퍼 마리오 C++  (1) 2018.11.02
백준 2998번 : 8진수 C++  (0) 2018.10.31

+ Recent posts