๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Programmers

[C++/PGS] Lv.4 : ํ˜ธํ…” ๋ฐฉ ๋ฐฐ์ • (์žฌ๊ท€)

xxilliant 2025. 4. 16. 16:12
728x90
๋ฐ˜์‘ํ˜•

 

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;
}

728x90
๋ฐ˜์‘ํ˜•