[Algorithm] ๐Ÿ˜€๋ฐฑ์ค€ 1744 ์ˆ˜ ๋ฌถ๊ธฐ

HaJingJingยท2021๋…„ 8์›” 25์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
100/119

0. ๋ฌธ์ œ

๊ธธ์ด๊ฐ€ N์ธ ์ˆ˜์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ทธ ์ˆ˜์—ด์˜ ํ•ฉ์„ ๊ตฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ๊ทธ๋ƒฅ ๊ทธ ์ˆ˜์—ด์˜ ํ•ฉ์„ ๋ชจ๋‘ ๋”ํ•ด์„œ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ˆ˜์—ด์˜ ๋‘ ์ˆ˜๋ฅผ ๋ฌถ์œผ๋ ค๊ณ  ํ•œ๋‹ค. ์–ด๋–ค ์ˆ˜๋ฅผ ๋ฌถ์œผ๋ ค๊ณ  ํ•  ๋•Œ, ์œ„์น˜์— ์ƒ๊ด€์—†์ด ๋ฌถ์„ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ๊ฐ™์€ ์œ„์น˜์— ์žˆ๋Š” ์ˆ˜(์ž๊ธฐ ์ž์‹ )๋ฅผ ๋ฌถ๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ์ˆ˜๋ฅผ ๋ฌถ๊ฒŒ ๋˜๋ฉด, ์ˆ˜์—ด์˜ ํ•ฉ์„ ๊ตฌํ•  ๋•Œ ๋ฌถ์€ ์ˆ˜๋Š” ์„œ๋กœ ๊ณฑํ•œ ํ›„์— ๋”ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด, ์–ด๋–ค ์ˆ˜์—ด์ด {0, 1, 2, 4, 3, 5}์ผ ๋•Œ, ๊ทธ๋ƒฅ ์ด ์ˆ˜์—ด์˜ ํ•ฉ์„ ๊ตฌํ•˜๋ฉด 0+1+2+4+3+5 = 15์ด๋‹ค. ํ•˜์ง€๋งŒ, 2์™€ 3์„ ๋ฌถ๊ณ , 4์™€ 5๋ฅผ ๋ฌถ๊ฒŒ ๋˜๋ฉด, 0+1+(23)+(45) = 27์ด ๋˜์–ด ์ตœ๋Œ€๊ฐ€ ๋œ๋‹ค.

์ˆ˜์—ด์˜ ๋ชจ๋“  ์ˆ˜๋Š” ๋‹จ ํ•œ๋ฒˆ๋งŒ ๋ฌถ๊ฑฐ๋‚˜, ์•„๋‹ˆ๋ฉด ๋ฌถ์ง€ ์•Š์•„์•ผํ•œ๋‹ค.

์ˆ˜์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ˆ˜์—ด์˜ ๊ฐ ์ˆ˜๋ฅผ ์ ์ ˆํžˆ ๋ฌถ์—ˆ์„ ๋•Œ, ๊ทธ ํ•ฉ์ด ์ตœ๋Œ€๊ฐ€ ๋˜๊ฒŒ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ
์ฒซ์งธ ์ค„์— ์ˆ˜์—ด์˜ ํฌ๊ธฐ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 10,000๋ณด๋‹ค ์ž‘์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—, ์ˆ˜์—ด์˜ ๊ฐ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ˆ˜์—ด์˜ ์ˆ˜๋Š” -10,000๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 10,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜์ด๋‹ค.

์ถœ๋ ฅ
์ˆ˜๋ฅผ ํ•ฉ์ด ์ตœ๋Œ€๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋ฌถ์—ˆ์„ ๋•Œ ํ•ฉ์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ •๋‹ต์€ ํ•ญ์ƒ 231๋ณด๋‹ค ์ž‘๋‹ค.

1. ์•„์ด๋””์–ด

๐Ÿ’ก ์Œ์ˆ˜์™€ ์–‘์ˆ˜๋ฅผ ๋ณ„๋„๋กœ ๊ตฌ๋ถ„ํ•จ
๐Ÿ’ก ์–‘์ˆ˜๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœํ•˜์—ฌ ๊ณฑํ•œ ํ›„, ์–‘์ˆ˜๊ฐ€ ํ™€์ˆ˜๊ฐœ๋ผ๋ฉด ๋‚˜๋จธ์ง€ ์ˆ˜๋ฅผ ๋”ํ•ด์คŒ
๐Ÿ’ก ์Œ์ˆ˜๋Š” ์˜ค๋ฆ„์ฐจ์ˆœํ•˜์—ฌ ๊ณฑํ•œ ํ›„, 0์„ ๊ณ ๋ คํ•˜์—ฌ ๋‚˜๋จธ์ง€ ์ˆ˜๋ฅผ ๋”ํ• ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•จ
๐Ÿ’ก 0์ด ์žˆ๊ณ  ์Œ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ํ™€์ˆ˜์ด๋ฉด ๋‘ ๊ฐœ๋ฅผ ๊ณฑํ•ด 0์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ
๐Ÿ’ก 1์€ ์–ด๋–ค ์ˆ˜์™€ ๊ณฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋”ํ•˜๋Š” ๊ฒƒ์ด ๋” ํผ

2. ํ•ต์‹ฌ ํ’€์ด

  1. ์Œ์ˆ˜์™€ ์–‘์ˆ˜๋ฅผ ๋ณ„๋„๋กœ ๊ตฌ๋ถ„ํ•จ
ArrayList<Integer> plus = new ArrayList<>();
ArrayList<Integer> minus = new ArrayList<>();
		
for(int i=0; i<n; i++) {
	if(arr[i] < 0) {
		minus.add(arr[i]);
		arr[i] = 0;
	}
			
	plus.add(arr[i]);
}
  1. ์–‘์ˆ˜๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœํ•˜์—ฌ ๊ณฑํ•œ ํ›„, ์–‘์ˆ˜๊ฐ€ ํ™€์ˆ˜๊ฐœ๋ผ๋ฉด ๋‚˜๋จธ์ง€ ์ˆ˜๋ฅผ ๋”ํ•ด์คŒ
for(int i=0; i<pSize/2; i++) {
	int a = plus.remove(0);
	int b = plus.remove(0);
	if(a == 1 || b == 1) {
		sum += (a+b);
	} else {
		sum += (a*b);
	}
}
		
if(pSize % 2 != 0) {
	sum += plus.remove(0);
}
  1. ์Œ์ˆ˜๋Š” ์˜ค๋ฆ„์ฐจ์ˆœํ•˜์—ฌ ๊ณฑํ•œ ํ›„, 0์„ ๊ณ ๋ คํ•˜์—ฌ ๋‚˜๋จธ์ง€ ์ˆ˜๋ฅผ ๋”ํ• ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•จ
for(int i=0; i<mSize/2; i++) {
	int a = minus.remove(0);
	int b = minus.remove(0);
	sum += (a*b);
}
  1. 0์ด ์žˆ๊ณ  ์Œ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ํ™€์ˆ˜์ด๋ฉด ๋‘ ๊ฐœ๋ฅผ ๊ณฑํ•ด 0์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ
if(zero == -1 && mSize % 2 != 0) {
	sum += minus.remove(0);
}

3. ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class BOJ_1744 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int n = Integer.parseInt(br.readLine());
		int zero = -1;
		Integer[] arr = new Integer[n];
		
		for(int i=0; i<n; i++) {
			arr[i] = Integer.parseInt(br.readLine());
			if(arr[i] == 0) zero = 1;
		}
		
		Arrays.sort(arr, Collections.reverseOrder());
		
		ArrayList<Integer> plus = new ArrayList<>();
		ArrayList<Integer> minus = new ArrayList<>();
		
		for(int i=0; i<n; i++) {
			if(arr[i] < 0) {
				minus.add(arr[i]);
				arr[i] = 0;
			}
			
			plus.add(arr[i]);
		}
		
		plus.removeAll(Arrays.asList(Integer.valueOf(0)));
		
		Collections.sort(minus);
		
		int pSize = plus.size();
		int mSize = minus.size();
		int sum = 0;
		
		for(int i=0; i<pSize/2; i++) {
			int a = plus.remove(0);
			int b = plus.remove(0);
			if(a == 1 || b == 1) {
				sum += (a+b);
			} else {
				sum += (a*b);
			}
		}
		
		if(pSize % 2 != 0) {
			sum += plus.remove(0);
		}
		
		for(int i=0; i<mSize/2; i++) {
			int a = minus.remove(0);
			int b = minus.remove(0);
			sum += (a*b);
		}
		
		if(zero == -1 && mSize % 2 != 0) {
			sum += minus.remove(0);
		}
		
		System.out.println(sum);
	}

}

4. ๊ฒฐ๊ณผ

์„ฑ๊ณตโœจ

profile
๐ŸŒฑ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๐ŸŒฑ

0๊ฐœ์˜ ๋Œ“๊ธ€