코드굽는 타자기

SWEA[3752] - 가능한 시험 점수[D4] 본문

알고리즘/탐색

SWEA[3752] - 가능한 시험 점수[D4]

bright-jun 2020. 2. 6. 10:02

링크

SWEA[4014]

문제설명

  • -

문제풀이

  • 경우의 수

문제코드

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Solution3752 {
    public static void main(String[] args) throws IOException {
        System.setIn(new FileInputStream("res/swea/3752.txt"));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine().trim()," ");

        int T=Integer.parseInt(st.nextToken());
        for (int test_case = 1; test_case <= T; test_case++) {
            int ans=0;
            int [] index = new int [10001];
            int [] temp_index = new int[10001];
            st = new StringTokenizer(br.readLine().trim()," ");
            int N = Integer.parseInt(st.nextToken());
            int[] score = new int[N];

            st = new StringTokenizer(br.readLine().trim()," ");
            for (int i = 0; i < N ; i++) {
                score[i] = Integer.parseInt(st.nextToken());
            }

            int idx_max=0;
            int max = idx_max+1;
            index[0]=1;

            for (int i = 0; i < N; i++) {
                for (int idx = 0; idx < max; idx++) {
                    if(index[idx]!=0) {
//                        System.out.println(idx+score[i]);
                        temp_index[idx+score[i]]++;
                        idx_max = Math.max(idx_max, idx+score[i]);
                        int debug=0;
                    }
                }
                max = idx_max+1;
                for (int idx = 0; idx < max; idx++) {
                    if(temp_index[idx]!=0) {
                        index[idx]=temp_index[idx];
                        temp_index[idx]=0;
                    }
                }
                int debug=0;
            }

            for (int i = 0; i < 10001; i++) {
                if(index[i]!=0)ans++;
            }
            System.out.println("#"+test_case+" "+ans);
            /*
             * 초기화
             */
        }//end test_case
    }//end main
}

아쉬운점

  • stack으로 시도했었다가 시간초과뜸
  • 5 2 3 경우 5추가되고 5까지 탐색하는데 2,4,6 이렇게 추가되는 경우 있음
    • array 하나 더 생성해서 해야 함

잘한점

  • sum MAX가 10000임을 이용하고 index를 이용해서 해결

'알고리즘 > 탐색' 카테고리의 다른 글

SWEA[1220] - Magnetic[D3]  (0) 2020.02.05
SWEA[1859] - 백만 장자 프로젝트[D2]  (0) 2020.01.29
Baekjoon[1024] - 수열의 합  (0) 2020.01.29
Comments