๐Ÿ“ Coding Test Study/Algorithm Problem

[C++][Programmers][์Šคํƒ/ํ] ๊ฐ™์€ ์ˆซ์ž๋Š” ์‹ซ์–ด

ibelieveinme 2023. 5. 18. 00:32
728x90

*๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/12906

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

*ํ’€์ด๋ฐฉ๋ฒ•

๋งจ ์ฒ˜์Œ์— arr ๋ฒกํ„ฐ์— ์žˆ๋Š” ๊ฐ’์„ answer ๋ฒกํ„ฐ์— ๋„ฃ๊ณ  arr ๋ฒกํ„ฐ๋ฅผ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋Œ๋ฉด์„œ answer ๋ฒกํ„ฐ์˜ ๋งˆ์ง€๋ง‰ ๊ฐ’๊ณผ ๋‹ค๋ฅด๋ฉด ๋˜ ๋„ฃ๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค.

vector(stack)์„ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ vector์˜ push_back(), back(), front() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. 

 

* ์•Œ์•„๋‘˜ ๊ฒƒ

1) vector ํ•จ์ˆ˜๋“ค

size() - ๋ฒกํ„ฐ์˜ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜
swap(vector๊ฐ์ฒด) - ๋‘ ๋ฒกํ„ฐ์˜ ๋‚ด์šฉ ๊ตํ™˜
empty() - ๋ฒกํ„ฐ๊ฐ€ ๋น„์—ˆ๋Š”์ง€ ์—ฌ๋ถ€ ๋ฐ˜ํ™˜
at(index) - index๋ฒˆ์งธ ์š”์†Œ ์ ‘๊ทผ
front() - ๋ฒกํ„ฐ์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ ๋ฐ˜ํ™˜
back() - ๋ฒกํ„ฐ์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ ๋ฐ˜ํ™˜
begin() - ๋ฒกํ„ฐ์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ
end() - ๋ฒกํ„ฐ์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ

 

2) vector์˜ ์ค‘๋ณต์›์†Œ ์ œ๊ฑฐ ๋ฐฉ๋ฒ•

๋‚˜๋Š” answer ๋ฒกํ„ฐ๋ฅผ ํ•˜๋‚˜ ๋” ๋‘๊ณ  ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ ๋งˆ์ง€๋ง‰ ์›์†Œ์™€ ๋‹ค๋ฅธ์ง€๋ฅผ ํŒ๋‹จํ–ˆ๋Š”๋ฐ,

vector์˜ ์ค‘๋ณต์›์†Œ๋ฅผ algorithm STL์˜ vector erase, unique ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ์ค‘๋ณต์ œ๊ฑฐ๊ฐ€ ๋œ๋‹ค๋”๋ผ.

 

์›๋ฆฌ๋ฅผ ์•Œ์•„๋ณด์ž.

ex) 1 1 2 3 3 4 5 5 5 6

 ->  1 2 3 4 5 6 5 5 5 6 (unique ์ ์šฉ)

vector์˜ unique ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ์ค‘๋ณต ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉฐ ์•ž๋ถ€ํ„ฐ ์ฑ„์›Œ๋‚˜๊ฐ„๋‹ค.

๊ทธ๋Ÿผ ์›๋ž˜ ๊ธธ์ด๋ณด๋‹ค ์ค‘๋ณต๋œ ์›์†Œ์˜ ๊ฐœ์ˆ˜๋งŒํผ ์ค„์–ด๋“ค๊ฒŒ ๋˜๊ณ  ๋‚˜๋จธ์ง€ ์ž๋ฆฌ์—๋Š” ๊ธฐ์กด ์›์†Œ๊ฐ’๋“ค์ด ์ฑ„์›Œ์ง„๋‹ค.

์ฆ‰, ์ค„์–ด๋“  ๊ฐœ์ˆ˜๋ฅผ ์•Œ์•„๋‚ด์„œ ์›๋ž˜ ๊ธธ์ด์—์„œ ์ค„์–ด๋“  ๊ฐœ์ˆ˜๋งŒํผ์„ ๋บ€ ๋ถ€๋ถ„์„ ์ง€์šฐ๋ฉด ๋œ๋‹ค.

 

์ฝ”๋“œ๋กœ ๋ด๋ณด์ž.

#include <vector>
#include <algorithm>

int main(){
    vector <int> v;
    
    v.push_back(1);
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);
    v.push_back(5);
    v.push_back(5);
    v.push_back(6); // 1 1 2 3 3 4 5 5 5 6
   
    v.erase(unique(v.begin(), v.end()), v.end()); // 1 2 3 4 5 6
}

์œ„์ฒ˜๋Ÿผ unique ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ด์„œ ์ค‘๋ณต๋œ ์›์†Œ๊ฐœ์ˆ˜๋งŒํผ ๊ธธ์ด๊ฐ€ ์ค„์–ด๋“  vector์˜ ๋๋ถ€๋ถ„๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ๊ฐ’๊นŒ์ง€ ์ง€์šฐ๋„๋ก eraseํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

* ์ฝ”๋“œ

#include <vector>
using namespace std;

vector<int> solution(vector<int> arr) {
	vector<int> answer;

	if (!arr.empty()) answer.push_back(arr.front());
	for (auto& i : arr) {
		if (answer.back() != i) {
			answer.push_back(i);
		}
	}

	return answer;
}

์ค‘๋ณต์ œ๊ฑฐ๋ฅผ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ

#include <vector>
#include <algorithm>
using namespace std;

vector<int> solution(vector<int> arr) {
    arr.erase(unique(arr.begin(), arr.end()),arr.end());
    return arr;
}

erase, unique ํ•จ์ˆ˜๋กœ ์ค‘๋ณต์ œ๊ฑฐํ•œ ์ฝ”๋“œ

 

728x90