본문 바로가기

코드포스

[코드포스 Practice12] C. Given Length and Sum of Digits...

 

-1 -1 안 되는 거 제외하기 

 

그 후 되는 거 생각해보기

 

앞에서 부터 - 뒤에서 부터

 

힌트 받았당

최소 최대 전부 다 손코딩 했는데 북님이 더 깔끔한 코드를 알려주셨다.

push_back()

최대랑 최소 그냥 역순 아닌가? 생각 들었는데 다른 점이 있어서 따로 짰다. 그런데 이거 조금 더 생각해보면 최소는 맨 첫자리가 1이어야 하므로 s-1을 구한 다음 첫번째 자리에 1을 더해주면 끝난다ㅋㅋ 짱신기함

 

 

 

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

int main()
{
    int m, s;
    int start, end;
    scanf("%d %d", &m, &s);
    vector <int> min_ans(m, 0);
    vector <int> max_ans(m, 0);

    if (m == 1 && s == 0)
    {
        printf("0 0");
        return (0);
    }
    if (s < 1 || m * 9 < s)
    {
        printf("-1 -1");
        return (0);
    }
    //min
    int sum = s - 1;
    for (int i = 0; i < m; i++)
    {
        if (i == 0)
            end = 1;
        else
            end = 0;
        for (int j = 9; j >= end; j--)
        {
            if (j <= sum)
            {
                min_ans[i] = j;
                sum -= j;
                break;
            }
        }
    }
    min_ans[m - 1] += 1;
    
    //max
    sum = s;
    for (int i = 0; i < m; i++)
    {
        if (i == 0)
            end = 1;
        else
            end = 0;
        for (int j = 9; j >= end; j--)
        {
            if (j <= sum)
            {
                max_ans[i] = j;
                sum -= j;
                break;
            }
        }
    }
    for (int i = m - 1; i >= 0; i--)
    {
        printf("%d", min_ans[i]);
    }
    printf(" ");
    for (int i = 0; i < m; i++)
    {
        printf("%d", max_ans[i]);
    }

    return (0);
}

와~~ 끝

 

거의 뭐 코포를 디버깅 툴로 썼다.

 

첫번째는 조건문 잘못 달아서 틀리고 두번째는 push_back하면서 값 초기화 안 해서 틀리고 등등.. 

앞으로 코포 풀 때 컴파일러 버젼 가장 낮은 걸로 푸는 게 좋을 것 같다. 아니면 무시하고 지나감ㅋㅋㅠ