[TIL] 250825

๊น€์„ธํฌยท2025๋…„ 8์›” 25์ผ

โœ๏ธToday I Learned

๐Ÿ“… 2025-08-25

  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์—ฐ์†๋œ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ
  • 2025 ์–ธ๋ฆฌ์–ผ ํŽ˜์Šคํƒ€ 1์ผ์ฐจ
  • ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๊ฒŒ์ž„ ๊ฐœ๋ฐœ ๊ฐ•์˜ - 4. ๊ฒŒ์ž„ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์—ฐ์†๋œ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ

๋ฌธ์ œ ๋งํฌ
๋ฌธ์ œ ์„ค๋ช…
๋น„๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ์ˆ˜์—ด์ด ์ฃผ์–ด์งˆ ๋•Œ, ๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ์ฐพ์œผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด ์ˆ˜์—ด์—์„œ ์ž„์˜์˜ ๋‘ ์ธ๋ฑ์Šค์˜ ์›์†Œ์™€ ๊ทธ ์‚ฌ์ด์˜ ์›์†Œ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ์€ k์ž…๋‹ˆ๋‹ค.
ํ•ฉ์ด k์ธ ๋ถ€๋ถ„ ์ˆ˜์—ด์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ ๊ธธ์ด๊ฐ€ ์งง์€ ์ˆ˜์—ด์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
๊ธธ์ด๊ฐ€ ์งง์€ ์ˆ˜์—ด์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ ์•ž์ชฝ(์‹œ์ž‘ ์ธ๋ฑ์Šค๊ฐ€ ์ž‘์€)์— ๋‚˜์˜ค๋Š” ์ˆ˜์—ด์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
์ˆ˜์—ด์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด sequence์™€ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ k๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์œ„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค์™€ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋ฅผ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. ์ด๋•Œ ์ˆ˜์—ด์˜ ์ธ๋ฑ์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ œํ•œ์‚ฌํ•ญ

  • 5 โ‰ค sequence์˜ ๊ธธ์ด โ‰ค 1,000,000
  • 1 โ‰ค sequence์˜ ์›์†Œ โ‰ค 1,000
  • sequence๋Š” ๋น„๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • 5 โ‰ค k โ‰ค 1,000,000,000
  • k๋Š” ํ•ญ์ƒ sequence์˜ ๋ถ€๋ถ„ ์ˆ˜์—ด๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.

ํ’€์ด

์ฒ˜์Œ ํ’€์ด
startIdx๋ฅผ ์ฐพ์„ ๋•Œ๋งˆ๋‹ค endIdx๋ฅผ ๋‹ค์‹œ ์ฐพ๋Š” ์ด์ค‘ for๋ฌธ ๊ตฌ์กฐ๋ผ ์‹œ๊ฐ„์ดˆ๊ณผ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

#include <vector> 

using namespace std; 

vector<int> solution(vector<int> sequence, int k) { 
    vector<int> answer(2,0); 
    int startIdx = 0; 
    while(startIdx<sequence.size()) 
    { 
        long long sum=0; 
        int endIdx = 0; 
        for(int i=startIdx; i<sequence.size(); i++) 
        { 
            sum+=sequence[i]; 
            if(sum==k) { endIdx = i; break; } 
            else if(sum>k) break; 
    	} 
        if(sum == k) 
        { 
          	if(answer[1]==0 || answer[1]-answer[0]>endIdx-startIdx) 
        	{ 
            	answer[0]=startIdx; answer[1]=endIdx; 
            } 
        } 
    	startIdx++; 
    }
    return answer; 
}

์ตœ์ข… ํ’€์ด
sum์— ๋”ฐ๋ผ startIdx, endIdx๋ฅผ ์ด๋™ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ค„์˜€๋‹ค.

#include <vector>

using namespace std;

vector<int> solution(vector<int> sequence, int k) {
    int size = sequence.size();
    vector<int> answer={0, size-1};
    int startIdx = 0;
    int endIdx = 0;
    long long sum=sequence[0]; 
    while(startIdx<size && endIdx<size)
    {
        if(sum == k)
        {
            if(answer[1]-answer[0]>endIdx-startIdx)
            {
                answer[0]=startIdx;
                answer[1]=endIdx;
            }
            sum-=sequence[startIdx++]; 
        }
        else if (sum<k)
        {
            endIdx++;
            if(endIdx<size) 
                sum+=sequence[endIdx];
        }
        else
        {
            sum-=sequence[startIdx++];            
        }
    }    
    return answer;
}

๐Ÿ’ก ๋А๋‚€ ์  (What I Felt)

ํ•ญ์ƒ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋จผ์ € ๊ณ„์‚ฐํ•˜๊ณ  ํ’€์–ด๋ณด๋Š” ์Šต๊ด€์„ ๊ฐ€์ ธ์•ผ๊ฒ ๋‹ค.
๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๊ฒŒ์ž„ ๊ฐœ๋ฐœ ๊ฐ•์˜์—์„œ ๋””๋ฒ„๊น… ๋กœ๊ทธ๋กœ ๋ฐ๋”” ์„œ๋ฒ„์ผ ๋•Œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜ ์ˆœ์„œ๋ฅผ ํ™•์ธํ•ด๋ดค๋”๋‹ˆ ์ด์ „์— ์ด๋ก ์œผ๋กœ ๋ฐฐ์› ๋˜ NetConnection์ด๋‚˜ NetRole ๋ถ€๋ถ„์ด ์ข€ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ด๋๋‹ค.
์–ธ๋ฆฌ์–ผ ํŽ˜์Šคํƒ€ 1์ผ์ฐจ์—์„œ ์ฃผ๋กœ ๊ฒŒ์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ชฝ์„ ๋“ค์—ˆ๋Š”๋ฐ ์•„ํŠธ ๋ถ€๋ถ„๋„ ํ•œ ๋ฒˆ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋“ค์–ด๋ณด๊ณ  ์‹ถ์—ˆ๋‹ค. ๋‚˜์ค‘์— ์˜์ƒ์ด ๋‹ค ๊ณต๊ฐœ๋์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.


์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์—ฐ์†๋œ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ

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