갱스타
갱스타의 블로그
갱스타
전체 방문자
오늘
어제
  • 분류 전체보기 (93)
    • TIL(Today I Learned) (10)
    • 노력만이 살길! (58)
      • 알고리즘 (29)
      • 네트워크 (3)
      • Python (1)
      • Spring Boot (1)
      • 합격하기 (0)
      • Adsp (3)
      • SQLD (10)
      • 데이터분석 (5)
      • 취업일기 (4)
      • IT 프로젝트 관리 (1)
      • 운영체제 (1)
    • Life (10)
      • 일상 그리고 리뷰 (10)
    • 기타 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준 2477번
  • 백준
  • 싸피합격
  • mac 단축키
  • post
  • 백준 참외밭
  • SW Expert Academy
  • 싸피7기
  • java 알고리즘
  • swea
  • 싸피
  • 통신
  • 백준 달팽이
  • 백준 알고리즘
  • 알고리즘
  • 달팽이 반복문
  • SWEA 13038
  • Get
  • 네트워크
  • 달팽이문제

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갱스타

갱스타의 블로그

[JAVA][SWEA][D3] 9229. 한빈이와 Spot Mart
노력만이 살길!/알고리즘

[JAVA][SWEA][D3] 9229. 한빈이와 Spot Mart

2022. 2. 13. 00:32

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AW8Wj7cqbY0DFAXN 

문제의 출처는 아래의 사이트 입니다. 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

1. 문제에서 요구하는것

재귀를 적절하게 사용하고 가지치기를 할 수 있는가?

 

2. 입력

첫 번째 줄에 테스트 케이스의 수 TC 가 주어진다.

이후 TC 개의 테스트 케이스가 새 줄로 구분되어 주어진다. 각 테스트 케이스는 다음과 같이 구성되었다.

첫 번째 줄에 과자 봉지의 개수와 무게 합 제한을 나타내는 자연수 N, M이 주어진다.
(2 ≤ N ≤ 1000 , 2 ≤ M ≤ 2000000)

이후 N개의 줄에 각 과자봉지의 무게 가 주어진다. (1 ≤ ai ≤ 1000000)

 

3. 문제의 내용

한빈이는 퇴근길에 스팟마트에 들러 과자 두 봉지를 사서 양 손에 하나씩 들고 가려고 한다.

스팟마트에는 N개의 과자 봉지가 있으며, 각 과자 봉지는 ai그램의 무게를 가진다.

배가 많이 고픈 한빈이는 최대한 양이 많은 (무게가 많이 나가는) 과자 봉지를 고르고 싶으나,

과자 두 봉지의 무게가 M 그램을 초과하면 무거워서 과자를 들고 다닐 수 없다.

한빈이가 들고 다닐수 있는 과자들의 최대 무게 합을 출력하라. 한빈이는 과자를 “정확히” 두 봉지 사야 함에 유의하라.

 

4. 정답 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class Solution{
	static List<Integer> list;
	static int answer;
	static int sum = 0;
	static int M = 0;
	static int N;
	static int[] arr; // 과자를 담는 배

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int T = Integer.parseInt(st.nextToken());
		for (int tc = 0; tc < T; tc++) {
			st = new StringTokenizer(br.readLine());
			N = Integer.parseInt(st.nextToken()); // 과자 봉지의 개수
			M = Integer.parseInt(st.nextToken()); // 목표 과자 무게
			st = new StringTokenizer(br.readLine());
			arr = new int[N];
			for (int i = 0; i < N; i++) {
				arr[i] = (Integer.parseInt(st.nextToken()));
			}
			// 조합 재귀 구현.
			sum = 0;
			answer = 0;
			Combination(0, 0);
			System.out.printf("#%d ", tc + 1);
			if (answer == 0) {
				System.out.println(-1);
			} else
				System.out.println(answer);

		}
	}

	static void Combination(int start, int cnt) {
		if (sum > M) {
			return;
		}

		if (cnt == 2) {
			if (sum == M) {
				answer = M;
				return;
			}

			if (sum < M && sum > answer) {
				answer = sum;
				return;
			}
			return;
		}
		for (int i = start; i < N; i++) {
			sum = sum + arr[i];
			Combination(i + 1, cnt + 1);
			sum = sum - arr[i];
		}

	}
}

'노력만이 살길! > 알고리즘' 카테고리의 다른 글

[JAVA][백준] 1592 영식이와 친구들  (0) 2022.02.25
[JAVA][SWEA][S/W 문제해결 기본]1233번 사칙연산 유효성 검사  (0) 2022.02.13
[JAVA][SWEA][모의SW] 1952번 수영장 이용요금  (0) 2022.02.10
[JAVA][SWEA] 1210번 [S/W 문제해결 기본] Ladder1  (0) 2022.02.10
[JAVA][SWEA] 1228 암호문1  (0) 2022.02.08
    '노력만이 살길!/알고리즘' 카테고리의 다른 글
    • [JAVA][백준] 1592 영식이와 친구들
    • [JAVA][SWEA][S/W 문제해결 기본]1233번 사칙연산 유효성 검사
    • [JAVA][SWEA][모의SW] 1952번 수영장 이용요금
    • [JAVA][SWEA] 1210번 [S/W 문제해결 기본] Ladder1
    갱스타
    갱스타
    열심히 배워보자

    티스토리툴바