땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • D
  • 이것이 리눅스다 with Rocky Linux9
  • ㅗ
  • E
  • I

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원

땅지원's Personal blog

Algorithm/Algorithm Problem

백준 3687 성냥개비(DP, 그리디)

2022. 10. 31. 17:05
 

3687번: 성냥개비

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

www.acmicpc.net

가장 큰 수

- 111111xxxxx
- 성냥 개수가 홀수면 3개(7) 쓰고 나머지 2개(1)로 이어붙이기

가장 작은 수

- xxxx888888

- 성냥을 많이 쓰면서 자리수를 최대한 줄여야 된다

DP Table에 min값을 저장한다

2 ~ 9까지 만들 수 있는 애들을 Queue에 넣고 성냥을 1~10까지 넣어 볼 수 있는 경우 다 넣는다

package pratice;

import java.util.*;

class Data{
    int cnt;
    long num;

    public Data(int cnt, long num){
        this.cnt = cnt;
        this.num = num;
    }

    @Override
    public String toString() {
        return cnt + "" + num;
    }
}
public class Main_3687 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();


        int[] num_data = {6,2,5,5,4,5,6,3,7,6};
        long[] dp = new long[101];
        for (int i = 0; i < 101; i++) {
            dp[i] = Long.MAX_VALUE;
        }

        Queue<Data> queue = new ArrayDeque<>();
        for (int j = 1; j < 10; j++) {
            queue.add(new Data(num_data[j],j));
        }

        while(!queue.isEmpty()){
            Data temp = queue.poll();
            int cnt = temp.cnt;
            long num = temp.num;
            dp[cnt] = Math.min(dp[cnt], num);

            if (dp[cnt] != num)
                continue;
            for (int j = 0; j < 10; j++) {
                if ((cnt+num_data[j]) <= 100){
                    queue.add(new Data(cnt+num_data[j],Long.parseLong(num+""+j)));
                }
            }
        }


        for (int i = 0; i < T; i++) {
            int N = sc.nextInt();
            StringBuilder sb = new StringBuilder();

                //가장 작은 수
                sb.append(dp[N]+" ");

                //가장 큰 수
                //성냥 개수가 홀수면 3개(7) 쓰고 나머지 2개(1)로 이어붙이기
                if (N == 3){
                    sb.append("7");
                }
                else{
                    if (N % 2 == 1){
                        sb.append("7");
                        for (int j = 0; j < (N-3)/2; j++) {
                            sb.append("1");
                        }
                    }
                    else{
                        for (int j = 0; j < N/2; j++) {
                            sb.append("1");
                        }
                    }
                }
            System.out.println(sb.toString());

        }
        }

    }

 

 

'Algorithm > Algorithm Problem' 카테고리의 다른 글

SWEA 1983 조교의 성적 매기기(Map)  (0) 2022.11.04
SWEA 1859 백만 장자 프로젝트(그리디) ★★  (0) 2022.11.03
백준 7682 틱택토(구현)  (0) 2022.10.25
백준 1094 막대기(구현, 비트마스킹)  (0) 2022.10.24
백준 14722 우유도시(DP)  (0) 2022.10.24
    'Algorithm/Algorithm Problem' 카테고리의 다른 글
    • SWEA 1983 조교의 성적 매기기(Map)
    • SWEA 1859 백만 장자 프로젝트(그리디) ★★
    • 백준 7682 틱택토(구현)
    • 백준 1094 막대기(구현, 비트마스킹)
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바