๊ธฐ๋ก๋ฐฉ

PGM : K๋ฒˆ์งธ์ˆ˜ ๋ณธ๋ฌธ

CodingTest/C++

PGM : K๋ฒˆ์งธ์ˆ˜

Soom_1n 2022. 3. 27. 01:17

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

๐Ÿ”น ๋ฌธ์ œ ๐Ÿ”น

๋ฐฐ์—ด array์˜ i๋ฒˆ์งธ ์ˆซ์ž๋ถ€ํ„ฐ j๋ฒˆ์งธ ์ˆซ์ž๊นŒ์ง€ ์ž๋ฅด๊ณ  ์ •๋ ฌํ–ˆ์„ ๋•Œ, k๋ฒˆ์งธ์— ์žˆ๋Š” ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด array๊ฐ€ [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3์ด๋ผ๋ฉด

  1. array์˜ 2๋ฒˆ์งธ๋ถ€ํ„ฐ 5๋ฒˆ์งธ๊นŒ์ง€ ์ž๋ฅด๋ฉด [5, 2, 6, 3]์ž…๋‹ˆ๋‹ค.
  2. 1์—์„œ ๋‚˜์˜จ ๋ฐฐ์—ด์„ ์ •๋ ฌํ•˜๋ฉด [2, 3, 5, 6]์ž…๋‹ˆ๋‹ค.
  3. 2์—์„œ ๋‚˜์˜จ ๋ฐฐ์—ด์˜ 3๋ฒˆ์งธ ์ˆซ์ž๋Š” 5์ž…๋‹ˆ๋‹ค.

๋ฐฐ์—ด array, [i, j, k]๋ฅผ ์›์†Œ๋กœ ๊ฐ€์ง„ 2์ฐจ์› ๋ฐฐ์—ด commands๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, commands์˜ ๋ชจ๋“  ์›์†Œ์— ๋Œ€ํ•ด ์•ž์„œ ์„ค๋ช…ํ•œ ์—ฐ์‚ฐ์„ ์ ์šฉํ–ˆ์„ ๋•Œ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

๐Ÿ”น ์ œํ•œ์‚ฌํ•ญ ๐Ÿ”น

- array์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 100 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
- array์˜ ๊ฐ ์›์†Œ๋Š” 1 ์ด์ƒ 100 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
- commands์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 50 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
- commands์˜ ๊ฐ ์›์†Œ๋Š” ๊ธธ์ด๊ฐ€ 3์ž…๋‹ˆ๋‹ค.

๐Ÿ”น ์ž…์ถœ๋ ฅ ๐Ÿ”น

์˜ˆ์‹œ
array commands return
[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]
์„ค๋ช…
[1, 5, 2, 6, 3, 7, 4]๋ฅผ 2๋ฒˆ์งธ๋ถ€ํ„ฐ 5๋ฒˆ์งธ๊นŒ์ง€ ์ž๋ฅธ ํ›„ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. [2, 3, 5, 6]์˜ ์„ธ ๋ฒˆ์งธ ์ˆซ์ž๋Š” 5์ž…๋‹ˆ๋‹ค.
[1, 5, 2, 6, 3, 7, 4]๋ฅผ 4๋ฒˆ์งธ๋ถ€ํ„ฐ 4๋ฒˆ์งธ๊นŒ์ง€ ์ž๋ฅธ ํ›„ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. [6]์˜ ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋Š” 6์ž…๋‹ˆ๋‹ค.
[1, 5, 2, 6, 3, 7, 4]๋ฅผ 1๋ฒˆ์งธ๋ถ€ํ„ฐ 7๋ฒˆ์งธ๊นŒ์ง€ ์ž๋ฆ…๋‹ˆ๋‹ค. [1, 2, 3, 4, 5, 6, 7]์˜ ์„ธ ๋ฒˆ์งธ ์ˆซ์ž๋Š” 3์ž…๋‹ˆ๋‹ค.

๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

๋ฐฐ์—ด์„ ์ž๋ฅด๊ณ , ์ •๋ ฌํ•˜๊ณ , ํŠน์ • ์ธ๋ฑ์Šค์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋ฐฐ์—ด์€ vector<int> ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

//#include<iostream>
#include <vector>
#include<algorithm>

using namespace std;

vector<int> solution(vector<int> array, vector<vector<int>> commands) {
    vector<int> answer;
    
    for (vector<int> cm : commands) {
        vector<int> temp(cm[1]-cm[0]+1);
        
        copy(array.begin()+cm[0]-1,array.begin()+cm[1],temp.begin());
        
        sort(temp.begin(),temp.end());
        
        answer.push_back(temp[cm[2]-1]);
    }
    return answer;
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

copy() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฐฐ์—ด์„ ์Šฌ๋ผ์ด์‹ฑ ํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”ธ code review ๐Ÿ”ธ

for (vector<int> cm : commands) {

- A : cm์ด ๋ณต์‚ฌ ์ƒ์„ฑ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. vector& ๋˜๋Š” auto&๋กœ ๋ฐ”๊ฟ”์ฃผ์„ธ์š”.

 

- ๋‚˜ : K๋ฒˆ์งธ์ˆ˜ ๋ฌธ์ œ์—์„œ, vector์˜ ํŠน์ • ๋ถ€๋ถ„์„ ๋ณต์‚ฌํ•˜๋Š”๋ฐ temp๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ temp๋ฅผ ์„ ์–ธํ•˜๊ณ  reserve๋กœ ๊ณต๊ฐ„๋งŒ ํ• ๋‹นํ•˜๋ฉด ๋ณต์‚ฌ๊ฐ€ ์•ˆ๋˜๋”๋ผ๊ตฌ์š”..? ๊ทธ๋ž˜์„œ for๋ฌธ์•ˆ์— vector๋ฅผ ๊ณ„์† ๋ฐ˜๋ณตํ•˜๋Š”๋ฐ ์ข€ ๋‚ญ๋น„์ธ ๊ฒƒ ๊ฐ™์•„ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ ํ•ฉ๋‹ˆ๋‹ค.

B : reserve ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ capacity๋ฅผ ๋ถ€์—ฌํ•œ ๊ฒฝ์šฐ์—๋Š”, ๊ณต๊ฐ„์„ ์˜ˆ์•ฝ์€ ํ–ˆ์ง€๋งŒ, ์‹ค์ œ๋กœ ํ• ๋‹น์ด ๋˜์–ด์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, temp.begin() ํ•จ์ˆ˜์—์„œ๋Š” ์ฃผ์†Œ๊ฐ€ ์—†๋‹ค๊ณ  ํŒ๋‹จ์„ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 
๋”ฐ๋ผ์„œ back_inserter ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ temp์— ํ• ๋‹นํ•˜๋ฉฐ ์‚ฝ์ž…์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค! 
ํ•ด๋‹น ํ•จ์ˆ˜๋Š” push_back ํ•จ์ˆ˜๊ฐ€ ๋‚ด์žฅ๋˜์–ด์žˆ์–ด์„œ ์˜ค๋ฒ„๋กœ๋”ฉ์ด ์ž๋™์œผ๋กœ ๋œ๋‹ค๊ณ  ํ•˜๋„ค์š”. 
copy ํ•จ์ˆ˜๋Š” = ์—ฐ์‚ฐ์„ ํ•œ๋‹ค๊ณ  ํ•˜๋„ค์š”. 
=> ์ด๊ฑฐ ๋•Œ๋ฌธ์— ์‹ค์ œ size๊ฐ€ ์—†๋Š” ๊ฑธ = ์—ฐ์‚ฐํ•˜๋ ค๋‹ˆ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ฒƒ ๊ฐ™์•„์š”. 
์•„๋‹์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.. ใ…Žใ…Ž;

A : copy๋Š” capacity๊ฐ€ ์•„๋‹ˆ๋ผ size๊ฐ€ ํ™•๋ณด๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
A : ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ณต์‚ฌํ•˜๋˜ ๊ฐ€์žฅ ๊ฐ„๊ฒฐํ•œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“œ๋ ค๋ฉด ๋ฒกํ„ฐ์˜ ์ƒ์„ฑ์ž ์ค‘์— ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœํšŒํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ˜๋ณต์ž ์Œ์„ ์ธ์ž๋กœ ๋ฐ›๋Š” ๋ฒ„์ „์ด ์žˆ๋Š”๋ฐ ๊ทธ๊ฑธ ํ†ตํ•ด์„œ temp ๋ฒกํ„ฐ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” temp ๋ฒกํ„ฐ๋ฅผ for๋ฌธ ๋ฐ–์œผ๋กœ ๋นผ๋‚ด์„œ ๋งค ๋ฐ˜๋ณต๋งˆ๋‹ค vector๊ฐ€ ์†Œ๋ฉธํ•˜์ง€ ์•Š๋„๋ก ํ•ด์ฃผ๊ณ , for๋ฌธ ์ง„์ž… ์ „์— array.size()๋งŒํผ์˜ capacity๋ฅผ ํ™•๋ณดํ•œ ํ›„ for๋ฌธ ๋‚ด์—์„œ๋Š” assign์„ ํ†ตํ•ด ํ•„์š”ํ•œ ํ•ญ๋ชฉ์—ด์ด ๋ณต์‚ฌ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฒกํ„ฐ์˜ ํ•ญ๋ชฉ์—ด์ด ์ €์žฅ๋  ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๋Š” ๋ณ€ํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ๋™์ ์œผ๋กœ resize๋˜๋ฉฐ ๋ถˆํ•„์š”ํ•œ ์ค‘๋ณต ์ดˆ๊ธฐํ™”๋„ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

๐Ÿ”ธ feedback code ๐Ÿ”ธ

#include <vector>
#include<algorithm>

using namespace std;

vector<int> solution(vector<int> array, vector<vector<int>> commands) {
    vector<int> answer;
    vector<int> temp(array.size());

    for (vector<int>& cm : commands) {
        temp.assign(array.begin() + cm[0] - 1, array.begin() + cm[1]);

        sort(temp.begin(), temp.end());

        answer.push_back(temp[cm[2] - 1]);
    }
    return answer;
}

๐Ÿ”ธ end ๐Ÿ”ธ

vector์˜ ๋ณต์‚ฌ๊ฐ€ ์•„์ง ์ต์ˆ™ํ•˜์ง€ ์•Š์•„์„œ copy๋ฅผ ์“ธ๋ฐ ์—†์ด ์‚ฌ์šฉํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

vector์˜ capacity ํ• ๋‹น๊ณผ ๊ฐ’ ํ• ๋‹น์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ๊ฒ ๋‹ค.

728x90