[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋‰ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ง(C++)

2025. 4. 15. 13:31ยท๐Ÿ–ฅ๏ธ Study Note/Coding Test

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

 

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

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 

๋ฌธ์ œ ์„ค๋ช…

๋‰ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ง

์—ฌ๋Ÿฌ ์–ธ๋ก ์‚ฌ์—์„œ ์Ÿ์•„์ง€๋Š” ๋‰ด์Šค, ํŠนํžˆ ์†๋ณด์„ฑ ๋‰ด์Šค๋ฅผ ๋ณด๋ฉด ๋น„์Šท๋น„์Šทํ•œ ์ œ๋ชฉ์˜ ๊ธฐ์‚ฌ๊ฐ€ ๋งŽ์•„ ์ •์ž‘ ํ•„์š”ํ•œ ๊ธฐ์‚ฌ๋ฅผ ์ฐพ๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค. Daum ๋‰ด์Šค์˜ ๊ฐœ๋ฐœ ์—…๋ฌด๋ฅผ ๋งก๊ฒŒ ๋œ ์‹ ์ž…์‚ฌ์› ํŠœ๋ธŒ๋Š” ์‚ฌ์šฉ์ž๋“ค์ด ํŽธ๋ฆฌํ•˜๊ฒŒ ๋‹ค์–‘ํ•œ ๋‰ด์Šค๋ฅผ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๋ฌธ์ œ์ ์„ ๊ฐœ์„ ํ•˜๋Š” ์—…๋ฌด๋ฅผ ๋งก๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ฐœ๋ฐœ์˜ ๋ฐฉํ–ฅ์„ ์žก๊ธฐ ์œ„ํ•ด ํŠœ๋ธŒ๋Š” ์šฐ์„  ์ตœ๊ทผ ํ™”์ œ๊ฐ€ ๋˜๊ณ  ์žˆ๋Š” "์นด์นด์˜ค ์‹ ์ž… ๊ฐœ๋ฐœ์ž ๊ณต์ฑ„" ๊ด€๋ จ ๊ธฐ์‚ฌ๋ฅผ ๊ฒ€์ƒ‰ํ•ด๋ณด์•˜๋‹ค.

  • ์นด์นด์˜ค ์ฒซ ๊ณต์ฑ„..'๋ธ”๋ผ์ธ๋“œ' ๋ฐฉ์‹ ์ฑ„์šฉ
  • ์นด์นด์˜ค, ํ•ฉ๋ณ‘ ํ›„ ์ฒซ ๊ณต์ฑ„.. ๋ธ”๋ผ์ธ๋“œ ์ „ํ˜•์œผ๋กœ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ
  • ์นด์นด์˜ค, ๋ธ”๋ผ์ธ๋“œ ์ „ํ˜•์œผ๋กœ ์‹ ์ž… ๊ฐœ๋ฐœ์ž ๊ณต์ฑ„
  • ์นด์นด์˜ค ๊ณต์ฑ„, ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ฝ”๋”ฉ ๋Šฅ๋ ฅ๋งŒ ๋ณธ๋‹ค
  • ์นด์นด์˜ค, ์‹ ์ž… ๊ณต์ฑ„.. "์ฝ”๋”ฉ ์‹ค๋ ฅ๋งŒ ๋ณธ๋‹ค"
  • ์นด์นด์˜ค "์ฝ”๋”ฉ ๋Šฅ๋ ฅ๋งŒ์œผ๋กœ 2018 ์‹ ์ž… ๊ฐœ๋ฐœ์ž ๋ฝ‘๋Š”๋‹ค"

๊ธฐ์‚ฌ์˜ ์ œ๋ชฉ์„ ๊ธฐ์ค€์œผ๋กœ "๋ธ”๋ผ์ธ๋“œ ์ „ํ˜•"์— ์ฃผ๋ชฉํ•˜๋Š” ๊ธฐ์‚ฌ์™€ "์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ"์— ์ฃผ๋ชฉํ•˜๋Š” ๊ธฐ์‚ฌ๋กœ ๋‚˜๋‰˜๋Š” ๊ฑธ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. ํŠœ๋ธŒ๋Š” ์ด๋“ค์„ ๊ฐ๊ฐ ๋ฌถ์–ด์„œ ๋ณด์—ฌ์ฃผ๋ฉด ์นด์นด์˜ค ๊ณต์ฑ„ ๊ด€๋ จ ๊ธฐ์‚ฌ๋ฅผ ์ฐพ์•„๋ณด๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์œ ์šฉํ•  ๋“ฏ์‹ถ์—ˆ๋‹ค.

์œ ์‚ฌํ•œ ๊ธฐ์‚ฌ๋ฅผ ๋ฌถ๋Š” ๊ธฐ์ค€์„ ์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋…ผ๋ฌธ๊ณผ ์ž๋ฃŒ๋ฅผ ์กฐ์‚ฌํ•˜๋˜ ํŠœ๋ธŒ๋Š” "์ž์นด๋“œ ์œ ์‚ฌ๋„"๋ผ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ƒˆ๋‹ค.

์ž์นด๋“œ ์œ ์‚ฌ๋„๋Š” ์ง‘ํ•ฉ ๊ฐ„์˜ ์œ ์‚ฌ๋„๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ• ์ค‘์˜ ํ•˜๋‚˜๋กœ ์•Œ๋ ค์ ธ ์žˆ๋‹ค. ๋‘ ์ง‘ํ•ฉ A, B ์‚ฌ์ด์˜ ์ž์นด๋“œ ์œ ์‚ฌ๋„ J(A, B)๋Š” ๋‘ ์ง‘ํ•ฉ์˜ ๊ต์ง‘ํ•ฉ ํฌ๊ธฐ๋ฅผ ๋‘ ์ง‘ํ•ฉ์˜ ํ•ฉ์ง‘ํ•ฉ ํฌ๊ธฐ๋กœ ๋‚˜๋ˆˆ ๊ฐ’์œผ๋กœ ์ •์˜๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ง‘ํ•ฉ A = {1, 2, 3}, ์ง‘ํ•ฉ B = {2, 3, 4}๋ผ๊ณ  ํ•  ๋•Œ, ๊ต์ง‘ํ•ฉ A ∩ B = {2, 3}, ํ•ฉ์ง‘ํ•ฉ A ∪ B = {1, 2, 3, 4}์ด ๋˜๋ฏ€๋กœ, ์ง‘ํ•ฉ A, B ์‚ฌ์ด์˜ ์ž์นด๋“œ ์œ ์‚ฌ๋„ J(A, B) = 2/4 = 0.5๊ฐ€ ๋œ๋‹ค. ์ง‘ํ•ฉ A์™€ ์ง‘ํ•ฉ B๊ฐ€ ๋ชจ๋‘ ๊ณต์ง‘ํ•ฉ์ผ ๊ฒฝ์šฐ์—๋Š” ๋‚˜๋ˆ—์…ˆ์ด ์ •์˜๋˜์ง€ ์•Š์œผ๋‹ˆ ๋”ฐ๋กœ J(A, B) = 1๋กœ ์ •์˜ํ•œ๋‹ค.

์ž์นด๋“œ ์œ ์‚ฌ๋„๋Š” ์›์†Œ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜๋Š” ๋‹ค์ค‘์ง‘ํ•ฉ์— ๋Œ€ํ•ด์„œ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์ค‘์ง‘ํ•ฉ A๋Š” ์›์†Œ "1"์„ 3๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋‹ค์ค‘์ง‘ํ•ฉ B๋Š” ์›์†Œ "1"์„ 5๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ํ•˜์ž. ์ด ๋‹ค์ค‘์ง‘ํ•ฉ์˜ ๊ต์ง‘ํ•ฉ A ∩ B๋Š” ์›์†Œ "1"์„ min(3, 5)์ธ 3๊ฐœ, ํ•ฉ์ง‘ํ•ฉ A ∪ B๋Š” ์›์†Œ "1"์„ max(3, 5)์ธ 5๊ฐœ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ๋‹ค์ค‘์ง‘ํ•ฉ A = {1, 1, 2, 2, 3}, ๋‹ค์ค‘์ง‘ํ•ฉ B = {1, 2, 2, 4, 5}๋ผ๊ณ  ํ•˜๋ฉด, ๊ต์ง‘ํ•ฉ A ∩ B = {1, 2, 2}, ํ•ฉ์ง‘ํ•ฉ A ∪ B = {1, 1, 2, 2, 3, 4, 5}๊ฐ€ ๋˜๋ฏ€๋กœ, ์ž์นด๋“œ ์œ ์‚ฌ๋„ J(A, B) = 3/7, ์•ฝ 0.42๊ฐ€ ๋œ๋‹ค.

์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด ์‚ฌ์ด์˜ ์œ ์‚ฌ๋„๋ฅผ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌธ์ž์—ด "FRANCE"์™€ "FRENCH"๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด๋ฅผ ๋‘ ๊ธ€์ž์”ฉ ๋Š์–ด์„œ ๋‹ค์ค‘์ง‘ํ•ฉ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๊ฐ๊ฐ {FR, RA, AN, NC, CE}, {FR, RE, EN, NC, CH}๊ฐ€ ๋˜๋ฉฐ, ๊ต์ง‘ํ•ฉ์€ {FR, NC}, ํ•ฉ์ง‘ํ•ฉ์€ {FR, RA, AN, NC, CE, RE, EN, CH}๊ฐ€ ๋˜๋ฏ€๋กœ, ๋‘ ๋ฌธ์ž์—ด ์‚ฌ์ด์˜ ์ž์นด๋“œ ์œ ์‚ฌ๋„ J("FRANCE", "FRENCH") = 2/8 = 0.25๊ฐ€ ๋œ๋‹ค.

 

๋ฌธ์ œ ํ•ด์„ค

1. ๋‘ ๋ฌธ์ž์”ฉ ๋ฌถ์„ ๊ฒƒ

2. ๋‘ ๋ฌธ์ž์”ฉ ๋ฌถ์„ ๋•Œ ํ•˜๋‚˜๋ผ๋„ ์•ŒํŒŒ๋ฒณ์ด ์•„๋‹ˆ๋ผ๋ฉด ํ•ด๋‹น ๋ฌธ์ž ๋ฌถ์Œ์€ ๋ฒ„๋ฆด ๊ฒƒ

3. ๋ฌธ์ž ๋ฌถ์Œ์˜ ์ค‘๋ณต ํ—ˆ์šฉ

 

์œ„ ์„ธ ๊ฐ€์ง€๋งŒ ์ž˜ ์œ ๋…ํ•ด์„œ ๋ฌธ์ž ๋ฌถ์Œ์„ ๋งŒ๋“ค๊ณ , ๊ฐ ๋ฌธ์ž์˜ ํ•ฉ์ง‘ํ•ฉ๊ณผ ๊ต์ง‘ํ•ฉ์„ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

 

๋‚ด ์ฝ”๋“œ

#include <string>
#include <unordered_map>
#include <iostream>
#include <cctype>
using namespace std;

// ๋ฌธ์ž์—ด์—์„œ 2๊ธ€์ž์”ฉ ์ž˜๋ผ์„œ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์•ŒํŒŒ๋ฒณ๋งŒ ํฌํ•จ๋œ ๊ฒฝ์šฐ์—๋งŒ ๋งต์— ์ถ”๊ฐ€
void processString(const string& str, unordered_map<string, int>& counter) {
    for(int i = 0; i < str.length() - 1; ++i) {
        // ๋‘ ๋ฌธ์ž๊ฐ€ ๋ชจ๋‘ ์•ŒํŒŒ๋ฒณ์ธ์ง€ ํ™•์ธ
        if(!isalpha(str[i]) || !isalpha(str[i+1])) {
            continue;
        }
        
        // ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜
        string element;
        element.push_back(toupper(str[i]));
        element.push_back(toupper(str[i+1]));
        
        // ๋งต์— ์นด์šดํŒ…
        counter[element]++;
    }
}

int solution(string str1, string str2) {
    unordered_map<string, int> counter1, counter2;
    
    // ๋‘ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ
    processString(str1, counter1);
    processString(str2, counter2);
    
    int intersection = 0;
    int union_size = 0;
    
    // ๊ต์ง‘ํ•ฉ ๊ณ„์‚ฐ
    for(const auto& pair : counter1) {
        const string& element = pair.first;
        int count1 = pair.second;
        int count2 = counter2[element];
        
        intersection += min(count1, count2);
        union_size += max(count1, count2);
        
        // counter2์—์„œ ์ฒ˜๋ฆฌํ•œ ์›์†Œ ์ œ๊ฑฐ
        counter2.erase(element);
    }
    
    // counter2์— ๋‚จ์€ ์›์†Œ๋“ค์€ str1์— ์—†๋Š” ์›์†Œ๋“ค์ด๋ฏ€๋กœ ํ•ฉ์ง‘ํ•ฉ์— ์ถ”๊ฐ€
    for(const auto& pair : counter2) {
        union_size += pair.second;
    }
    
    // ์ž์นด๋“œ ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ
    if(union_size == 0) {
        return 65536;  // ๋‘ ์ง‘ํ•ฉ์ด ๋ชจ๋‘ ๊ณต์ง‘ํ•ฉ์ธ ๊ฒฝ์šฐ
    }
    
    return (intersection * 65536) / union_size;

 

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ–ฅ๏ธ Study Note > Coding Test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]์œ ์—ฐ๊ทผ๋ฌด์ œ(C++)  (0) 2025.04.14
[๋ฐฑ์ค€ 1926] ๊ทธ๋ฆผ(C++)  (0) 2023.11.18
[๋ฐฑ์ค€ 1931] ํšŒ์˜์‹ค ๋ฐฐ์ •(C++)  (0) 2023.10.26
[๋ฐฑ์ค€ 1003] ํ”ผ๋ณด๋‚˜์น˜ ํ•จ์ˆ˜ (C++)  (0) 2023.10.25
[Hacker Rank] Organizing Containers of Balls (C++)  (1) 2023.10.09
'๐Ÿ–ฅ๏ธ Study Note/Coding Test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]์œ ์—ฐ๊ทผ๋ฌด์ œ(C++)
  • [๋ฐฑ์ค€ 1926] ๊ทธ๋ฆผ(C++)
  • [๋ฐฑ์ค€ 1931] ํšŒ์˜์‹ค ๋ฐฐ์ •(C++)
  • [๋ฐฑ์ค€ 1003] ํ”ผ๋ณด๋‚˜์น˜ ํ•จ์ˆ˜ (C++)
Beankong_
Beankong_
์ฃผ๋‹ˆ์–ด ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋ž˜๋จธ ๊ณต๋ถ€ ๊ธฐ๋ก
  • Beankong_
    Beankong's Devlog
    Beankong_
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด ๊ธ€ (146)
      • โ›… Daily (0)
      • ๐Ÿ–ฅ๏ธ Study Note (2)
        • C++ (1)
        • Unreal Engine (5)
        • Coding Test (123)
        • Design Patteren (5)
        • VCS (Git..) (1)
        • Server (1)
      • ๐Ÿงญ Devlog (8)
        • ์˜ค๋‹ต๋…ธํŠธ (4)
        • UE5 GameLift Server Test Project (1)
        • TIL (3)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๋งํฌ

    • ๊ณต์ง€์‚ฌํ•ญ

    • ์ธ๊ธฐ ๊ธ€

    • ํƒœ๊ทธ

      unrealengine build system
      ๊ฒŒ์ž„ ๊ฐœ๋ฐœ
      ํ—ฌํ…Œ์ด์ปค
      ๊ฒŒ์ž„ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      programmers
      ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
      ๊ฒŒ์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      UnrealEngine
      ๊ฒŒ์ž„ ๋ชจ์ž‘
      UnrealEngine5
      ์•Œ๊ณ ๋ฆฌ์ฆ˜
      ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
      propertyaccess
      ํ”„๋ฃŒ๊ทธ๋ž˜๋จธ์Šค
      unrealengine module
      ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜
      OnlineSubsystem
      cpp
      ๊ทธ๋ž˜ํ”„ ์ˆœํšŒ
      ๊ทธ๋ฆฌ๋””(greedy)
    • ์ตœ๊ทผ ๋Œ“๊ธ€

    • ์ตœ๊ทผ ๊ธ€

    • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
    Beankong_
    [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋‰ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ง(C++)
    ์ƒ๋‹จ์œผ๋กœ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”