티스토리 뷰

CS/알고리즘

[SWEA] D3 : 5948, 5789, 5549

Sueaty 2019. 7. 24. 16:01

[5948] : 새샘이의 7-3-5 게임

  • 입력 : 7개의 서로 다른 정수
  • 출력 : 7개의 정수 중 3개의 수의 합 중 5번째로 큰 수
  • 전략
    • 주어지는 입력이 7개의 정수이므로 만들 수 있는 합의 조합은 35개
    • 내림 차순으로 정렬을 하고 5번째로 큰 수를 구한다 (합은 같을 수 있음 (5 + 6 + 7) = (4 + 5 + 9) 처럼)
#include <iostream>
#include <algorithm>

using namespace std;

bool descend(int, int);
int fifthLargeNum(int *);

int main(void){
    int testCase, sevenNums[7], sumSet[35];
    cin >> testCase;
    for(int tc = 1; tc <= testCase; tc++){
        int pos = 0;
        for(int i = 0; i < 7; i++) cin >> sevenNums[i];
        for(int x = 0; x < 5; x++){
            for(int y = x + 1; y < 6; y++){
                for(int z = y + 1; z < 7; z++){
                    sumSet[pos++] = sevenNums[x] + sevenNums[y] + sevenNums[z];
                }
            }
        }
        // 내림차순으로 정렬
        sort(sumSet,sumSet + 35, descend);
        cout << "#" << tc << " " << fifthLargeNum(sumSet) << endl;
    }
    return 0;
}

bool descend(int a, int b){
    return a > b;
}

int fifthLargeNum(int *sumSet){
    int unique = 0, order = 0;
    for(int i = 0; order < 5; i++){
        if(unique != sumSet[i]){
            order++;
            unique = sumSet[i];
        }
    }
    return unique;
}

[5789] : 현주의 상자 바꾸기

  • 입력 : N개의 상자, 작업 횟수 Q, 숫자 변경할 범위 L~R
  • 출력 : 상자에 적혀있는 값
  • 전략
    • 배열을 동적할당 해서 배열의 값 바꾸며 풀지뭐 간.단.
#include <iostream>

using namespace std;

int main(void){
    int testCase;
    cin >> testCase;
    for(int tc = 1; tc <= testCase; tc++){
        int N, Q;
        cin >> N >> Q;
        // N개의 상자 생성 & 초기화
        int *boxes = new int[N];
        for(int n = 0; n < N; n++) boxes[n] = 0;
        //작업
        int L, R;
        for(int i = 1; i < Q + 1; i++){
            cin >> L >> R;
            for(int change = L - 1; change < R; change++)
                boxes[change] = i;
        }
        // print answer
        cout << "#" << tc << " ";
        for(int n = 0; n < N; n++)
            cout << boxes[n] << " ";
        cout << endl;
    }
    return 0;
}

[5549] : 홀수일까 짝수일까

  • 입력 : 100자리 이하의 양의 정수
  • 출력 : 홀수인지 짝수인지
  • 전략
    • 일부러 100자리 양의 정수라고 했겠지. 문자열로 받아서 마지막 자리가 짝수인지 홀수인지만 확인하면 된다,
#include <iostream>
using namespace std;

int main(void){
    int testCase;
    cin >> testCase;
    for(int tc = 1; tc <= testCase; tc++){
        string N;
        cin >> N;
        
        int length =  N.length();
        char lastChar = N[length - 1];
        if(int(N[length - 1]) % 2 == 0)
            cout << "#" << tc << " Even" << endl;
        else
            cout << "#" << tc << " Odd" << endl;
    }
    return 0;
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함