본문 바로가기

백준/다이나믹 프로그래밍

성냥깨비

728x90

www.acmicpc.net/problem/3687

 

3687번: 성냥개비

각 테스트 케이스에 대해서 입력으로 주어진 성냥개비를 모두 사용해서 만들 수 있는 가장 작은 수와 가장 큰 수를 출력한다. 두 숫자는 모두 양수이어야 하고, 숫자는 0으로 시작할 수 없다. 

www.acmicpc.net


#include<iostream>
#include<vector>
#include <string>
#include <math.h>
#include <algorithm>

using namespace std;

long long num[9] = { 0, 0, 1, 7, 4, 2, 0, 8, 10 };


int main() {
	
	int n;

	cin >> n;
	int cnt;

	long long mindp[101];
	long long maxdp[101];

	mindp[0] = 0;
	mindp[1] = 0;
	mindp[2] = 1;
	mindp[3] = 7;
	mindp[4] = 4;
	mindp[5] = 2;
	mindp[6] = 6;
	mindp[7] = 8;
	mindp[8] = 10;



	for (int i = 9; i <= 100; i++) {
		
		for (int j = 2; j <8 ; j++) {
			

			if(j==2){
			
				mindp[i] =  mindp[i - j] * 10 + num[j];
			}
			else {
			
				mindp[i] =min(mindp[i], mindp[i - j] * 10 + num[j]);
			}
		}
	
	}


	for (int i = 0; i < n; i++) {
		
		cin >> cnt;
		cout << mindp[cnt] << " ";
		
		while (cnt) {
			if (cnt % 2 != 0) {
				cout << 7;
				cnt -= 3;
			}
			else {
				cout << 1;
				cnt -= 2;
			}
		}
		cout << endl;
	}



}

'백준 > 다이나믹 프로그래밍' 카테고리의 다른 글

다리놓기  (0) 2021.04.26
퇴사  (0) 2021.04.26
우수 마을 / Tree DP  (0) 2021.04.24
사회망 서비스 / Tree DP  (0) 2021.04.24
LCS  (0) 2021.04.23