Algorithm/문제 풀이 / / 2020. 4. 30. 22:26

[SWEA_4050 - JAVA] 재관이의 대량할인

반응형

문제

https://swexpertacademy.com/main/code/problem/problemDetail.docontestProbId=AWIseXoKEUcDFAWN

 

SW Expert Academy

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

swexpertacademy.com

 

풀이

  • 3벌씩 한묶음 중 가장 저렴한 옷은 할인이 적용된다.
    -> 그리디문제, 비싼순서로 나열 3번째 옷마다 제외.
  • 내림차순으로 정렬후 뒤에서부터 가격의 합을  도출.
    -> 3으로 나누었을때, 나머지가 0인경우가 할인을 적용받을 옷.

 

 

JAVA 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;

public class Solution {

	static int N;
	static int[] clothes;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st = null;
		int tc = Integer.parseInt(br.readLine());

		for (int test = 1; test <= tc; test++) {
			N = Integer.parseInt(br.readLine());
			clothes = new int[N];
			st = new StringTokenizer(br.readLine());
			for (int i = 0; i < N; i++) {
				clothes[i] = Integer.parseInt(st.nextToken());
			} // end of input

			Arrays.sort(clothes); // 내림차순 정렬
			int cost = 0; // 비용

			for (int i = 1; i <= N; i++) {
				if (i % 3 == 0) { // 3번째 옷마다 제외
					continue;
				}
				cost += clothes[N - i]; // 뒤에서부터 계산
			}

			sb.append("#" + test + " " + cost + "\n");
		} // end of testcase
		System.out.println(sb);
	} // end of main

}
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유