๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/2๋‹จ๊ณ„

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv2] : ๊ตฌ๋ช…๋ณดํŠธ

by Jaeguk 2022. 6. 23.
๋ฌธ์ œ ๋งํฌ

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

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๊ตฌ๋ช…๋ณดํŠธ

๋ฌด์ธ๋„์— ๊ฐ‡ํžŒ ์‚ฌ๋žŒ๋“ค์„ ๊ตฌ๋ช…๋ณดํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌ์ถœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋ช…๋ณดํŠธ๋Š” ์ž‘์•„์„œ ํ•œ ๋ฒˆ์— ์ตœ๋Œ€ 2๋ช…์”ฉ ๋ฐ–์— ํƒˆ ์ˆ˜ ์—†๊ณ , ๋ฌด๊ฒŒ ์ œํ•œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ๋žŒ๋“ค์˜ ๋ชธ๋ฌด๊ฒŒ๊ฐ€ [70kg, 50kg, 80kg, 5

programmers.co.kr

๋ฌด์ธ๋„์— ๊ฐ‡ํžŒ ์‚ฌ๋žŒ๋“ค์„ ๋ชจ๋‘ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ตœ์†Œ ๊ตฌ๋ช…๋ณดํŠธ ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๋ฌธ์ œ.

 

ํ’€์ด

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

  • ํ’€์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜

 ๋ฌด๊ฒŒ๊ฐ€ ๊ฐ€๋ฒผ์šด ์‚ฌ๋žŒ์€ ์ตœ๋Œ€ํ•œ ๋ฌด๊ฒŒ๊ฐ€ ๋ฌด๊ฑฐ์šด ์‚ฌ๋žŒ์ด๋ž‘ ๊ฐ™์ด ํƒ€์•ผ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ง์„ ์ด๋ค„์„œ ๋ณดํŠธ์— ํƒˆ ์ˆ˜ ์žˆ๋‹ค.

์ผ๋‹จ ํƒˆ์ถœํ•ด์•ผํ•  ์‚ฌ๋žŒ๋“ค์„ ๋ฌด๊ฒŒ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์ค€๋‹ค.

ํˆฌํฌ์ธํ„ฐ ๋ฐฉ์‹์„ ์ด์šฉํ•ด์„œ ๋‚˜๊ฐ€์•ผํ•  ์‚ฌ๋žŒ์ค‘ ๊ฐ€์žฅ ๊ฐ€๋ฒผ์šด ์‚ฌ๋žŒ ํ•œ ๋ช…(์ดํ•˜ L)๊ณผ ๊ฐ€์žฅ ๋ฌด๊ฑฐ์šด์‚ฌ๋žŒ ํ•œ ๋ช…(์ดํ•˜ R)์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

๋งŒ์•ฝ ๋‘ ์‚ฌ๋žŒ์˜ ๋ฌด๊ฒŒ ํ•ฉ์ด

1. limit๋ณด๋‹ค ํฌ๋ฉด : ๋ฌด๊ฒŒ๋ฅผ ์ค„์—ฌ์•ผํ•˜๋ฏ€๋กœ ํ˜„์žฌ ๊ฐ€๋ฆฌํ‚ค๊ณ ์žˆ๋Š” R์„ ํ•œ ์นธ ์•ž์œผ๋กœ ๋‹น๊ธด๋‹ค. R = R - 1.

2. limit๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด : ๊ฐ™์ด ๋ณดํŠธ๋ฅผ ํƒˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‘ ์‚ฌ๋žŒ์„ ํƒ‘์Šน์‹œํ‚จ๋‹ค. L = L + 1, R = R - 1.

์ด ๊ณผ์ •์„ L๊ณผ R์ด ๊ฐ™์•„์ง€๊ธฐ ์ „๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

L >= R์ธ ๊ฒฝ์šฐ๋Š” L์€ ๊ฐ€๋ฒผ์šด ์‚ฌ๋žŒ์„ R์€ ๋ฌด๊ฑฐ์šด ์‚ฌ๋žŒ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค๋Š” ๊ธฐ์ค€์— ๋ชจ์ˆœ๋˜๋ฏ€๋กœ ์ด๋•Œ๋Š” ๋” ์ด์ƒ ์ง์„ ์ง€์„ ์ˆ˜ ์žˆ๋Š” ์ธ์›์ด ์—†๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ณ  ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฃŒ.

=> ํƒ‘์Šนํ•˜์ง€ ๋ชปํ•œ ์‚ฌ๋žŒ๋“ค์€ ํ˜ผ์ž์„œ ํƒ‘์Šนํ•œ๋‹ค.

 

์ฝ”๋“œ ์ž‘์„ฑ
 
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
const int MAX_N = 50000 + 5;
bool is_escaped[MAX_N];
 
int solution(vector<int> people, int limit) {
    int answer = 0;
    sort(people.begin(), people.end());
    int L = 0int R = people.size() - 1;
    for(int i = 0; i<people.size() - 1; i++){
        if(people[L] + people[R] <= limit){
            is_escaped[L] = is_escaped[R] = true;
            L++, R--;
            answer++;
        }
        else R--;
        if(L >= R)
            break;
    }
    for(int i = 0; i<people.size(); i++)
        if(!is_escaped[i])
            answer++;
    return answer;
}
cs

 

728x90