ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SWEA] 1244번 최대상금
    문제 풀이 2020. 4. 17. 21:34

    1244 최대상금


    풀이)

    교환할 수 있는 모든 경우를 확인해서 최대값을 찾았다.


    입력값을 int형으로 받아 자릿수대로 배열에 저장해놓고,

    바꾼 다음 다시 원래대로 만들어 놓기 귀찮아서

    아예 입력값을 string으로 받았다

    string 입력값을 순서를 바꾼 뒤 stoi()함수를 통해 int형으로 바꿔 최대값인지 확인해줬다. 


    주의

    값이 큰 수가 제일 앞에 있어야 하므로

    자리를 바꿀 때, 뒤의 자리값이 클 경우에만 교환해줬다.


    코드)

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #include <stdio.h>
    #include <iostream>
    #include <algorithm>
    #include <string>
    #include<string.h>
    using namespace std;
     
    string s;
    int n;
    int result;
     
    void dfs(int idx,int cnt) {
        
        if (cnt == n) {
            result = max(result, stoi(s));
            return;
        }
        if (idx >= s.length())return;
        for (int i = idx; i < s.length(); i++) {
            for (int j = i + 1; j < s.length(); j++) {
                if (s[i] <= s[j]) {
                    swap(s[i], s[j]);
                    dfs(i, cnt + 1);
                    swap(s[i], s[j]);
                }
            }
        }
    }
    int main() {
        //freopen("input.txt", "r", stdin);
        int test_case=0;
        int T=0;
        scanf("%d"&T);
        for (test_case = 1; test_case <= T; test_case++) {
            cin >> s >> n;
            result = stoi(s);
            //printf("%d", s.length());
            dfs(00);
            printf("#%d %d\n", test_case,result);
        }
        return 0;
    }
    cs


    예를 들어 입력값이 78644 2이면



    '문제 풀이' 카테고리의 다른 글

    [SWEA] 3752번 가능한 시험 점수  (0) 2020.04.18
    [SWEA] 1249번 보급로  (0) 2020.04.18
    [SWEA] 1859번 백만 장자 프로젝트  (0) 2020.04.17
    [백준] 5373번 큐빙  (0) 2020.04.15
    [백준] 17143번 낚시왕  (0) 2020.04.14

    댓글

Designed by Tistory.