๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค[Java] - ๊ตฌ๋ช…๋ณดํŠธ(๊ทธ๋ฆฌ๋””)

by ์ฃผ๋ฐœ2 2020. 2. 4.
๋ฐ˜์‘ํ˜•

https://programmers.co.kr/learn/courses/30/lessons/42885

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๊ตฌ๋ช…๋ณดํŠธ | ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

๋ฌด์ธ๋„์— ๊ฐ‡ํžŒ ์‚ฌ๋žŒ๋“ค์„ ๊ตฌ๋ช…๋ณดํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌ์ถœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋ช…๋ณดํŠธ๋Š” ์ž‘์•„์„œ ํ•œ ๋ฒˆ์— ์ตœ๋Œ€ 2๋ช…์”ฉ ๋ฐ–์— ํƒˆ ์ˆ˜ ์—†๊ณ , ๋ฌด๊ฒŒ ์ œํ•œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ๋žŒ๋“ค์˜ ๋ชธ๋ฌด๊ฒŒ๊ฐ€ [70kg, 50kg, 80kg, 50kg]์ด๊ณ  ๊ตฌ๋ช…๋ณดํŠธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ์ด 100kg์ด๋ผ๋ฉด 2๋ฒˆ์งธ ์‚ฌ๋žŒ๊ณผ 4๋ฒˆ์งธ ์‚ฌ๋žŒ์€ ๊ฐ™์ด ํƒˆ ์ˆ˜ ์žˆ์ง€๋งŒ 1๋ฒˆ์งธ ์‚ฌ๋žŒ๊ณผ 3๋ฒˆ์งธ ์‚ฌ๋žŒ์˜ ๋ฌด๊ฒŒ์˜ ํ•ฉ์€ 150kg์ด๋ฏ€๋กœ ๊ตฌ๋ช…๋ณดํŠธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ์„ ์ดˆ๊ณผํ•˜์—ฌ ๊ฐ™์ด ํƒˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ตฌ๋ช…๋ณดํŠธ๋ฅผ ์ตœ๋Œ€ํ•œ ์ ๊ฒŒ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ

programmers.co.kr

์ฝ”๋“œ

import java.util.Arrays;
class Solution {
	public int solution(int[] people, int limit) {
		int answer = 0;
		int i = 0;
        int j;

		Arrays.sort(people);

		// ๋ชธ๋ฌด๊ฒŒ๊ฐ€ ๊ฐ€์žฅ ๋ฌด๊ฑฐ์šด ์‚ฌ๋žŒ๋ถ€ํ„ฐ ํŒ๋‹จํ•œ๋‹ค.
		for(j=people.length-1; i<=j; j--) {
			// ์ตœ์†Œ + ์ตœ๋Œ€ ๋ชธ๋ฌด๊ฒŒ 2๋ช…์˜ ํ•ฉ์ด ๋ฌด๊ฒŒ์ œํ•œ๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ
			// ๊ฐ€์žฅ ํฐ ๋ชธ๋ฌด๊ฒŒ์˜ ์ธ์›์„ ๋ณดํŠธ1๋Œ€์— ํƒœ์›Œ ๋ณด๋‚ธ๋‹ค.
			if(people[j] + people[i] > limit)
				answer ++;

			/* ์ตœ์†Œ + ์ตœ๋Œ€ ๋ชธ๋ฌด๊ฒŒ 2๋ช…์˜ ํ•ฉ์ด ๋ฌด์ œ๊ฒŒํ•œ๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ์ž‘์€ ๊ฒฝ์šฐ
			 *  - ๋‘๋ช…์„ ํ•œ ๋ณดํŠธ์— ํƒœ์›Œ ๋ณด๋‚ธ๋‹ค.
			 *  - ๊ทธ ๋‹ค์Œ์œผ๋กœ ๋ชธ๋ฌด๊ฒŒ๊ฐ€ ์ž‘์€ ์ธ์›์„ ๊ธฐ์ค€์œผ๋กœ ์‚ผ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— i๊ฐ’์„ ++ํ•ด์ค€๋‹ค.
			 */
			else {
				answer ++;
				i ++;
			}
		}

		return answer;
	}

}

ํ’€์ด

๋…ผ๋ฆฌ๋ฅผ ์ƒ๊ฐํ•ด๋‚ด๋Š”๊ฒŒ ์–ด๋ ค์šด ๋ฌธ์ œ์˜€๋‹ค ..

๋ฌธ์ œ์˜ ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

1. ๊ตฌ๋ช…๋ณดํŠธ๋Š” ์ตœ๋Œ€ 2๋ช…์”ฉ ๋ฐ–์— ํƒˆ ์ˆ˜ ์—†๋‹ค.

2. ๊ตฌ๋ช…๋ณดํŠธ์— ํƒœ์šธ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ ์ œํ•œ์ด ์žˆ๋‹ค.

  - ์‚ฌ๋žŒ๋“ค์˜ ๋ชธ๋ฌด๊ฒŒ๊ฐ€ 50kg, 60kg ์ด๊ณ  ๊ตฌ๋ช…๋ณดํŠธ์˜ ๋ฌด๊ฒŒ์ œํ•œ์ด 100kg์ด๋ฉด ๊ตฌ๋ช…๋ณดํŠธ๋Š” 2๊ฐœ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

3. ๊ตฌ๋ช…๋ณดํŠธ๋ฅผ ์ตœ๋Œ€ํ•œ ์ ๊ฒŒ ์‚ฌ์šฉํ•ด ๋ชจ๋“  ์‚ฌ๋žŒ์„ ๊ตฌ์ถœํ•œ๋‹ค.

 

๊ฐ€์žฅ ๋ชธ๋ฌด๊ฒŒ๊ฐ€ ์ ์€ ์ธ์›๊ณผ ๊ฐ€์žฅ ๋ชธ๋ฌด๊ฒŒ๊ฐ€ ๋†’์€ ์ธ์›์˜ ํ•ฉ์ด ๋ฌด๊ฒŒ์ œํ•œ๋ณด๋‹ค ํฌ๋ƒ ์ž‘๋ƒ๋ฅผ ํŒ๋‹จํ•ด์„œ ํ•ด๊ฒฐํ•˜๋ฉด ๋œ๋‹ค.

 

์ฆ‰, ๋ฐฐ์—ด์„ ์ •๋ ฌํ•ด์„œ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์›์†Œ์™€ ๊ฐ€์žฅ ์™ผ์ชฝ ์›์†Œ์˜ ํ•ฉ์„ ๊ตฌํ•ด์„œ, ๋ฌด๊ฒŒ์ œํ•œ๋ณด๋‹ค ํฌ๋ƒ ์ž‘๋ƒ๋ฅผ ๋‚˜๋ˆ„์–ด ํ•ด๊ฒฐํ•œ๋‹ค.

 

๋งŒ์•ฝ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์›์†Œ์™€ ๊ฐ€์žฅ ์™ผ์ชฝ ์›์†Œ์˜ ํ•ฉ์ด ๋ฌด๊ฒŒ์ œํ•œ๋ณด๋‹ค ํฌ๋‹ค๋ฉด,

๋‘ ๋ช…์€ ํ•จ๊ป˜ ํƒœ์šธ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๊ฐ๊ฐ ๋”ฐ๋กœ ๋ณดํŠธ์— ํƒœ์›Œ์„œ ๋ณด๋‚ธ๋‹ค.

 

์œ„์™€ ๋ฐ˜๋Œ€๋กœ ๋‘ ์›์†Œ์˜ ํ•ฉ์ด ๋ฌด๊ฒŒ์ œํ•œ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด,

๋‘ ๋ช…์€ ํ•จ๊ป˜ ํƒœ์šธ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ•จ๊ป˜ ๋ณดํŠธ์— ํƒœ์›Œ์„œ ๋ณด๋‚ธ๋‹ค.

๊ทธ ํ›„ ๊ฐ€์žฅ ์•ž ์›์†Œ๋Š” ๋ณดํŠธ์— ํƒœ์›Œ ๋ณด๋ƒˆ์œผ๋ฏ€๋กœ, ์ธ๋ฑ์Šค๊ฐ’์„ +1ํ•ด์ค€๋‹ค. (i++)

 

for๋ฌธ์˜ ์กฐ๊ฑด์€ i<=j ์ธ๋ฐ, j๊ฐ’์€ ์ž‘์•„์ง€๊ณ , i๊ฐ’์€ ์ปค์ง€๋ฏ€๋กœ ๋‘ ๋ณ€์ˆ˜๊ฐ€ ๋งŒ๋‚  ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด์„œ ๋ณดํŠธ๋ฅผ ํƒœ์›Œ์„œ ๋ณด๋‚ด๋ฉด ๋œ๋‹ค.

๋ณด๋‚ผ ์ธ์›์ด ํ™€์ˆ˜์ผ ๊ฒฝ์šฐ => ๋‘ ๊ฐ’์ด ๊ฐ™์•„ ์ง€๋Š” ๊ฒฝ์šฐ๋Š” ๋ฌด์กฐ๊ฑด ํƒœ์›Œ ๋ณด๋‚ด์•ผํ•˜๋ฏ€๋กœ i=j๋„ ์กฐ๊ฑด์— ํฌํ•จํ•œ๋‹ค.

 

ex) ๋ชธ๋ฌด๊ฒŒ [20, 30, 30, 50, 60, 70, 80, 90, 100] ์ผ๋•Œ...

100kg, 90kg๋Š” ๊ฐ๊ฐ ๋”ฐ๋กœ ํƒœ์›Œ์„œ ๋ณด๋‚ธ๋‹ค.

๊ทธ ํ›„ (80kg 20kg) , (70kg 30kg), (60kg 30kg) ์„ ๋ณด๋‚ธ ํ›„ 50kg๋งŒ ๋‚จ์œผ๋ฏ€๋กœ 1๋Œ€๋ฅผ ๋” ๋ณด๋‚ธ๋‹ค.

(์ด๋•Œ i, j์˜ ๊ฐ’์€ ๋‘˜๋‹ค 3์ด๋‹ค.)

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€