[C++/PGS] Lv.4 : ํธํ ๋ฐฉ ๋ฐฐ์ (์ฌ๊ท)
https://school.programmers.co.kr/learn/courses/30/lessons/64063
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
ํ๋ก๊ทธ๋๋จธ์ค ๋ ๋ฒจ 4. ์ ๋ต๋ฅ 35%
์ฌ๊ท ์ฌ์ฉ ๋ฌธ์ !!
1. ํจ์จ์ฑ ์คํจ (78.8/100)
ํ ์คํธ์ผ์ด์ค๋ ๋ค ๋ง์๋๋ฐ, ํจ์ฉ์ฑ์ 0์ ใ ใ
์๋ง๋ ์๋ ๋ถ๋ถ์ด ๋ฌธ์ ์์ ๊ฒ์ด๋ค.
while(rooms.find(n) != rooms.end()){
n++;
}
๋น ๋ฐฉ์ ์ฐพ์๋๊น์ง while๋ฌธ์ ๋๋ ธ๋๋ฐ, ์ด ๋ถ๋ถ์ ์ต์ ํํด์ผ ํต๊ณผํ ๊ฒ ๊ฐ๋ค.
๋ค์ ๋น ๋ฐฉ์ ํจ์จ์ ์ผ๋ก ์ ์ฅํ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋ญ๊ฐ ์์๊น
๊ณ ๋ฏผํด๋ด๋ ๋ชจ๋ฅด๊ฒ ์ด์ ์ง๋ฌธ ๊ฒ์ํ์์ ํํธ๋ฅผ ์ป์๋ค >> ์ฌ๊ท์ ์ผ๋ก ๋น ๋ฐฉ์ ์ฐพ์์ฃผ๋ฉด ๋๋ค๊ณ ํจ!
2. ์ฑ๊ณต ์ฝ๋
์ฐ์ , ๋ฐฉ ๋ฒํธ์ ๊ณ ๊ฐ์ ์ ์ฅํ๋ ๊ฒ ์๋๋ผ, ๋ฐฉ ๋ฒํธ์ ๊ทธ ๋ค์ ๋น ๋ฐฉ ๋ฒํธ๋ฅผ ์ธํธ๋ก ์ ์ฅํด์ผ ํ๋ค. (ํฌ์ธํฐ ์ญํ )
๊ทธ๋ฆฌ๊ณ ํ์ฌ ๋ฐฉ์ด ๋น์ด์์ ๋๋ ํด๋น ๋ฐฉ์ ๋ฐฐ์ ํ + ๋ค์ ๋ฐฉ์ ํฌ์ธํฐ ์ฐ๊ฒฐ.
ํ์ฌ ๋ฐฉ์๋ ์ฌ๋์ด ์๊ณ ํ์ฌ ๋ฐฉ๊ณผ ์ฐ๊ฒฐ๋ ํฌ์ธํฐ(๋ค์ ๋ฐฉ)์ด ๋น์ด์์ ๊ฒฝ์ฐ, ๊ทธ ๋ฐฉ์ ๋ฆฌํด ํ, ๊ทธ ๋ค์ ๋ฐฉ์ ํฌ์ธํฐ ์ฐ๊ฒฐ
์ด๋ฐ ์์ผ๋ก ์ฌ๊ท์ ์ธ ํ์์ ๊ฑฐ์ณ์ฃผ์ด์ผ ํ๋ค.
ํ ์ด๋ ต๋ค....
์ฐธ๊ณ ๋ก, cpp์ ๊ฒฝ์ฐ ๋ฐ๋์ unordered_map์ ์ฌ์ฉํด์ผ ์๊ฐ์ด๊ณผ ์์ด ํต๊ณผํ ์ ์๋ค!
๋์ ํ์ด
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
unordered_map<long long, long long> rooms; // k: ๋ฐฉ ๋ฒํธ, v: ๋ค์ ๋น ๋ฐฉ ๋ฒํธ
long long findRoom(long long roomNumber){
if(rooms.find(roomNumber)==rooms.end()) { // ๋น ๋ฐฉ์ผ ๋
return roomNumber;
}
// ๋น ๋ฐฉ์ด ์๋๋ผ๋ฉด, ๊ทธ ๋ค์ ๋ฐฉ์ ํ์
return rooms[roomNumber] = findRoom(rooms[roomNumber]);
}
vector<long long> solution(long long k, vector<long long> room_number) {
vector<long long> answer;
for(int i=0; i<room_number.size(); ++i){
long long room = findRoom(room_number[i]);
answer.push_back(room);
rooms[room] = room+1;
}
return answer;
}