본문 바로가기
알고리즘/SWEA

[Java] SWEA9229_한빈이와 Spot Mart

by 댕꼬 2022. 3. 17.

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

 

SW Expert Academy

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

swexpertacademy.com

[문제]

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

 

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

 

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


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

 

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

 

[입력]

4                   //테스트케이스
3 45               //과자 개수, 무게제한
20 20 20         // 과자무게 
6 10
1 2 5 8 9 11
4 100
80 80 60 60
4 20
10 5 10 16

 

[출력]

#1 40
#2 10
#3 -1
#4 20

 

[풀이]

과자 N개중에서 2개를 뽑는 조합문제이다.

(과자를 선택하는데에 있어 순서는 중요하지 않으므로 순열은 x)

재귀함수를 돌려 조합을 구할까 하다가 2개만 뽑는거라 for문을 돌리는게 더 간단한 코드가 될 것 같아 이중for문을 이용하여 최대 무게가 되는 과자의 조합을 구해주었다. 

(조합의 정의와 재귀함수를 이용하여 조합을 구하는 코드는 아래 링크 클릭!)

https://java-is-happy-things.tistory.com/7?category=1266501 

 

[Java] 조합

조합 : 서로다른 N개의 원소에서 R개를 중복없이 순서에 상관없게 선택하는 것 ([1,2] 와 [2,1]은 같다) [입력] 4 2 1 2 3 4 [출력] [1, 2] [1, 3] [1, 4] [2, 3] [2, 4] [3, 4] [변수] - N, R : 존재하는..

java-is-happy-things.tistory.com

 

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

//swea9229

public class SWEA9229 {
	public static void main(String[] args) throws NumberFormatException, IOException {
		System.setIn(new FileInputStream("src//day04//hw//9229.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int tc = Integer.parseInt(br.readLine());
		
		for(int t=1; t<=tc; t++  ) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int N = Integer.parseInt(st.nextToken());	//과자갯수
			int M = Integer.parseInt(st.nextToken());	//제한무게
			
			//과자배열 생성
			int[] arr = new int[N];
			st = new StringTokenizer(br.readLine());
			for(int i=0; i<N; i++) {					
				arr[i]=Integer.parseInt(st.nextToken());
			}
			int max=0;
			int num=0;
			for(int i=0; i<N-1; i++) {
				for(int j=i+1; j<N; j++) {
					num  = arr[i]+arr[j];
					if(num>max && num<=M) max=num;		
					
				}
			}
			if(max==0) {
				System.out.printf("#%d %d\n",t,-1);
			}else {
				System.out.printf("#%d %d\n",t,max);
			}
			
			
		}
	}
	
}

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

[Java] SWEA1225_암호생성기  (0) 2022.03.17
[Java] SWEA1228_암호문1  (0) 2022.03.17
[Java] SWEA5215_ 햄버거다이어트  (1) 2022.03.17
[Java] SWEA1218_괄호짝짓기  (0) 2022.03.16
[Java] SWEA2805_농작물수확하기  (0) 2022.03.16

댓글