๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/1๋‹จ๊ณ„

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv1] : ์‹ ๊ณ  ๊ฒฐ๊ณผ ๋ฐ›๊ธฐ

by Jaeguk 2022. 6. 13.
๋ฌธ์ œ ๋งํฌ

https://programmers.co.kr/learn/courses/30/lessons/92334

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์‹ ๊ณ  ๊ฒฐ๊ณผ ๋ฐ›๊ธฐ

๋ฌธ์ œ ์„ค๋ช… ์‹ ์ž…์‚ฌ์› ๋ฌด์ง€๋Š” ๊ฒŒ์‹œํŒ ๋ถˆ๋Ÿ‰ ์ด์šฉ์ž๋ฅผ ์‹ ๊ณ ํ•˜๊ณ  ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”์ผ๋กœ ๋ฐœ์†กํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋ฌด์ง€๊ฐ€ ๊ฐœ๋ฐœํ•˜๋ ค๋Š” ์‹œ์Šคํ…œ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ ์œ ์ €๋Š” ํ•œ ๋ฒˆ์— ํ•œ ๋ช…์˜

programmers.co.kr

์œ ์ €๋“ค์€ ํ•œ ๋ฒˆ์— ํ•œ ๋ช…์˜ ์œ ์ €๋ฅผ ์‹ ๊ณ ํ•  ์ˆ˜ ์žˆ๋‹ค. K๋ฒˆ ์ด์ƒ์˜ ์‹ ๊ณ ๋ฅผ ๋‹นํ•œ ์‚ฌ๋žŒ์€ ์ด์šฉ ์ •์ง€๋ฅผ ๋‹นํ•œ๋‹ค.

์ •์ง€๋‹นํ•œ ์œ ์ €๋ฅผ ์‹ ๊ณ ํ•œ ์œ ์ €๋“ค์—๊ฒŒ ๋ฉ”์ผ์ด ๋ฐœ์†ก๋˜๋Š”๋ฐ, ๊ฐ ์œ ์ €๋ณ„๋กœ ๋ช‡ ํ†ต์˜ ๋ฉ”์ผ์„ ๋ฐ›์•˜๋Š”์ง€ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ.

 

ํ’€์ด

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋Š” ๋ฐฑ์ค€๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์†”๋ฃจ์…˜์˜ ํ‹€์ด ์ •ํ•ด์ ธ์žˆ์—ˆ๋‹ค.

์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์€ ์•Œ์•„์„œ ๋˜๊ณ , ์šฐ๋ฆฌ๋Š” ์†”๋ฃจ์…˜ ํ•จ์ˆ˜๋งŒ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

 

๋ฌธ์ œ์— ์•„๋ž˜์™€ ๊ฐ™์€ ์กฐ๊ฑด์ด ์ฃผ์–ด์ ธ์žˆ๋‹ค.

ํ•œ ์œ ์ €๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹ ๊ณ ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋™์ผํ•œ ์œ ์ €์— ๋Œ€ํ•œ ์‹ ๊ณ  ํšŸ์ˆ˜๋Š” 1ํšŒ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค

ํ•œ ์‚ฌ๋žŒ์ด ๊ฐ™์€ ์‚ฌ๋žŒ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ค‘๋ณตํ•ด์„œ ์‹ ๊ณ ํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์œ ํšจํ•˜์ง€๋Š” ์•Š๋‹ค๋Š” ๋œป์ด๋‹ค.

๊ทธ๋ž˜์„œ ์‹ ๊ณ ๋ฐ›์€ ๋‚ด์šฉ์ด ๋‹ด๊ฒจ์žˆ๋Š” report ๋ฒกํ„ฐ์—์„œ unique๋ฅผ ์ด์šฉํ•ด ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ด์คฌ๋‹ค.

  • ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•

1. ๋ฒกํ„ฐ๋ฅผ ์ •๋ ฌ์‹œ์ผœ์ค€๋‹ค. => sort(report.begin(), report.end());

2. ์ •๋ ฌ์‹œํ‚จ ๋ฒกํ„ฐ์—์„œ unique๊ฐ€ ๋ฆฌํ„ดํ•˜๋Š” ์ธ๋ฑ์Šค ~ ๋๊นŒ์ง€ ์‚ญ์ œ์‹œํ‚จ๋‹ค.

=> report.erase(unique(report.begin(), report.end()), report.end());

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฒกํ„ฐ๋‚ด์— ์ค‘๋ณต๋˜๋Š” ์ธ์ž๋“ค์„ 1๊ฐœ๋งŒ ๋‚จ๊ธฐ๊ณ  ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์‹ ๊ณ  ๋ฐ›์€ ๋‚ด์šฉ ์ฒ˜๋ฆฌ

์‹ ๊ณ ๋‚ด์šฉ์€ ๋ฌธ์ž์—ด์˜ ํ˜•ํƒœ๋กœ ๋˜์–ด์žˆ๋‹ค. "์‹ ๊ณ ํ•œ ์‚ฌ๋žŒ ์‹ ๊ณ ๋‹นํ•œ ์‚ฌ๋žŒ" ์˜ ํ˜•์‹์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‹ ๊ณ ๋‚ด์šฉ์ด "Muzi Frodo" ๋ฉด ๋ฌด์ง€๊ฐ€ ํ”„๋กœ๋„๋ฅผ ์‹ ๊ณ ํ–ˆ๋‹ค๋Š” ๋œป์ด๋‹ค. ๋ฌธ์ž์—ด ๋‚ด์—์„œ ๋„์›Œ์“ฐ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‹ ๊ณ ํ•œ ์‚ฌ๋žŒ๊ณผ ์‹ ๊ณ ๋‹นํ•œ ์‚ฌ๋žŒ์ด ๋‚˜๋ˆ„์–ด์ง„๋‹ค. ๊ทธ๋ž˜์„œ ๋„์›Œ์“ฐ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ž˜๋ผ์คฌ๋‹ค.

find ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๋„์›Œ์“ฐ๊ธฐ์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„๋‚ธ๋‹ค. string.find("",0) ์ด๋ผ๊ณ  ํ•˜๋ฉด ๋ฌธ์ž์—ด์—์„œ ์ฒ˜์Œ์œผ๋กœ ๋„์›Œ์“ฐ๊ธฐ๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

๊ทธ ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ฒ˜์Œ ~ ์ŠคํŽ˜์ด์Šค๋ฐ” ์•ž, ์ŠคํŽ˜์ด์Šค๋ฐ” ๋’ค ~ ๋๊นŒ์ง€ ์ด๋ ‡๊ฒŒ ๋ฌธ์ž์—ด์„ 2๊ฐœ๋กœ ์ž˜๋ผ์ฃผ๋ฉด ๋œ๋‹ค.

๋ฌธ์ž์—ด์„ ์ž๋ฅด๋Š” ๊ฑด substr() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ–ˆ๋‹ค. substrํ•จ์ˆ˜๋Š” substr(์‹œ์ž‘์ธ๋ฑ์Šค, ์ž๋ฅผ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด) ์ด๋ ‡๊ฒŒ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›๋Š”๋‹ค.

๊ทธ๋ฆฌ๊ณ  count๋ผ๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ๊ฐ ID๋ณ„๋กœ ์ด ๋ช‡๋ฒˆ์˜ ์‹ ๊ณ ๋ฅผ ๋ฐ›์•˜๋Š”์ง€ ์…Œ๋‹ค.

๋ชจ๋“  ์‹ ๊ณ ๋‚ด์šฉ์„ ์ฒ˜๋ฆฌํ•œ ํ›„์— count ๋ฐฐ์—ด์„ ๋Œ๋ฉด์„œ ๊ฐ’์ด K์ด์ƒ์ธ ID๋Š” ์ •์ง€๋ฅผ ๋‹นํ•˜๊ฒŒ๋œ๋‹ค.

์ •์ง€๋ฐ›์€ ํ•ด๋‹น ์•„์ด๋””๋ฅผ ๋ˆ„๊ฐ€ ์‹ ๊ณ ํ–ˆ๋Š”์ง€๋ฅผ ์•Œ์•„์•ผ ๋ฉ”์ผ์„ ๋ฐœ์†กํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ Who_reported๋ผ๋Š” ๋ฒกํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ 

Who_reported[์‹ ๊ณ  ๋ฐ›์€ ID] = {์‹ ๊ณ ํ•œ ID} ์ด๋ ‡๊ฒŒ ์ •๋ณด๋ฅผ ์ €์žฅํ•ด๋‘์—ˆ๋‹ค.

 

  • ๋ฌธ์ž์—ด์ธ ์•„์ด๋””๋ฅผ ์ˆซ์ž์ธ ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜

๋ฌธ์ž์—ด ๋ฒกํ„ฐ์ธ id_list ์—์„œ "Muzi"๋ผ๋Š” ์‚ฌ๋žŒ์˜ ID๊ฐ€ ๋ช‡ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ์ง€ ์•Œ์•„์•ผ ์ด ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‚˜๋Š” find๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ id_list.find(id_list.begin(), id_list.end(), "Muzi") - id_list.begin() ์ด๋ ‡๊ฒŒ ํ•ด์„œ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์•„๋ƒˆ๋‹ค. ๋ฌผ๋ก  ์ด๋ ‡๊ฒŒ ํ•ด๋„ ํ†ต๊ณผ๋ฅผ ๋ฐ›๊ธดํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ ๋ถ„๋“ค์€ ์–ด๋–ป๊ฒŒ ํ–ˆ๋‚˜ ๋ดค๋”๋‹ˆ map์„ ์ด์šฉํ•˜์‹  ๋ถ„์˜ ์ฝ”๋“œ๊ฐ€ ์ œ์ผ ํšจ์œจ์ ์ธ ๊ฒƒ ๊ฐ™์•˜๋‹ค..

map์„ ์ด์šฉํ•˜๋ฉด ๋” ๋นจ๋ฆฌ ID์ธ๋ฑ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. map์€ ํ‚ค๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ’์„ ์ฐพ๋Š” ๋ฐฉ์‹์ด๋ฏ€๋กœ O(1)๋งŒ์— ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜์žˆ๋‹ค. ์„ ์–ธ์€ map Temp <string, int>;  ์ด๋ ‡๊ฒŒ ํ•ด์ฃผ๋ฉด๋œ๋‹ค. ๋งŒ์•ฝ Muzi๋ผ๋Š” ์œ ์ €์˜ ID ์ธ๋ฑ์Šค๊ฐ€ 1์ด๋ผ๊ณ  ํ•˜๋ฉดTemp["Muzi"] == 1์ด๋‹ค.

 
 
#include <string>
#include <vector>
#include <algorithm>
#include <string.h>
using namespace std;
const int MAX_N = 1000 + 5;
 
int get_idx(string str, vector<string> id_list);
vector<int> solution(vector<string> id_list, vector<string> report, int k) {
    vector<int> answer;
    sort(report.begin(), report.end());
    report.erase(unique(report.begin(), report.end()), report.end());
    vector<int> Who_reported[MAX_N];
    int count[MAX_N];
    memset(count, 0sizeof(count));
    for (int i = 0; i < report.size(); i++) {
        int pos = report[i].find(" "0);
        string from = report[i].substr(0, pos);
        string to = report[i].substr(pos + 1, report[i].length());
        int from_idx = get_idx(from, id_list);
        int to_idx = get_idx(to, id_list);
        Who_reported[to_idx].push_back(from_idx);
        count[to_idx]++;
    }
    int copy_ans[MAX_N];
    memset(copy_ans, 0sizeof(copy_ans));
    for (int i = 0; i < id_list.size(); i++) {
        if (count[i] >= k) {
            for (int j = 0; j < Who_reported[i].size(); j++) {
                copy_ans[Who_reported[i][j]]++;
            }
        }
    }
    for (int i = 0; i < id_list.size(); i++) {
        answer.push_back(copy_ans[i]);
    }
    return answer;
}
 
int get_idx(string str, vector<string> id_list){
    int ret = find(id_list.begin(), id_list.end(), str) - id_list.begin();
    return ret;
}
cs

 

 

๋งค๋ฒˆ ๋ฐฑ์ค€๋งŒ ํ’€๋‹ค๊ฐ€, ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฐฉ์‹์œผ๋กœ ์—ฐ์Šตํ•˜๋ ค๊ณ  ์˜ค๋Š˜๋ถ€ํ„ฐ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋ คํ•œ๋‹ค.

1,2๋‹จ๊ณ„ ๋ฌธ์ œ๋Š” ๋Œ€๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋งŽ์•˜๋‹ค. ํ‰์†Œ ํ’€๋˜ ๋ฐฑ์ค€๋ฌธ์ œ๋Š” ๋ฌธ์ž์—ด๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ๊ฐ€ ์—†์–ด์„œ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฒŒ ์•„์ง ์ต์ˆ™ํ•˜์ง€ ์•Š๋‹ค. ๊ณ„์† ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋ฉด์„œ ๋ฌธ์ž์—ด ๋‹ค๋ฃจ๋Š” ๋ฒ•์„ ์ตํ˜€์•ผ๊ฒ ๋‹ค.

728x90