ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ์†Œ์ˆ˜ ์ฐพ๊ธฐ(C++)

2023. 3. 28. 23:55ยท๐Ÿ–ฅ๏ธ Study Note/Coding Test

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

 

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

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

programmers.co.kr

๋ฌธ์ œ ์„ค๋ช…

ํ•œ์ž๋ฆฌ ์ˆซ์ž๊ฐ€ ์ ํžŒ ์ข…์ด ์กฐ๊ฐ์ด ํฉ์–ด์ ธ์žˆ์Šต๋‹ˆ๋‹ค. ํฉ์–ด์ง„ ์ข…์ด ์กฐ๊ฐ์„ ๋ถ™์—ฌ ์†Œ์ˆ˜๋ฅผ ๋ช‡ ๊ฐœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋‚ด๋ ค ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ์ข…์ด ์กฐ๊ฐ์— ์ ํžŒ ์ˆซ์ž๊ฐ€ ์ ํžŒ ๋ฌธ์ž์—ด numbers๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ข…์ด ์กฐ๊ฐ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์†Œ์ˆ˜๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • numbers๋Š” ๊ธธ์ด 1 ์ด์ƒ 7 ์ดํ•˜์ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
  • numbers๋Š” 0~9๊นŒ์ง€ ์ˆซ์ž๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • "013"์€ 0, 1, 3 ์ˆซ์ž๊ฐ€ ์ ํžŒ ์ข…์ด ์กฐ๊ฐ์ด ํฉ์–ด์ ธ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

numbers  return
"17" 3
"011" 2

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์˜ˆ์ œ #1

[1, 7]์œผ๋กœ๋Š” ์†Œ์ˆ˜ [7, 17, 71]๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ #2

[0, 1, 1]์œผ๋กœ๋Š” ์†Œ์ˆ˜ [11, 101]๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • 11๊ณผ 011์€ ๊ฐ™์€ ์ˆซ์ž๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ํ•ด๋‹ต

#include <string>
#include <vector>
#include <set>
#include <algorithm>
#include <math.h

using namespace std;

// ์†Œ์ˆ˜ ๊ฒ€์‚ฌ
bool isPrime(int n)
{
    // 2๋ฏธ๋งŒ ์†Œ์ˆ˜๋Š” ์—†๋‹ค.
    if(n < 2)
        return false;
    
    // 2๋ถ€ํ„ฐ n์˜ ์ œ๊ณฑ๊ทผ๊นŒ์ง€ ์†Œ์ˆ˜ ๊ฒ€์‚ฌ
    for(int i = 2; i <= sqrt(n); ++i)
    {
        if(n%i == 0)
            return false;
    }
    
    return true;
}

int solution(string numbers) {
    int answer = 0;
    set<int>ans{};
    
    // ์ž…๋ ฅ ๋ฌธ์ž์—ด ์ •๋ ฌ
    sort(numbers.begin(), numbers.end());

    
    // numbers ์ˆœ์—ด์˜ ์ฒซ๋ฒˆ์งธ ๋ฌธ์ž๋ถ€ํ„ฐ ๋ฌธ์ž๋ฅผ ๋ˆ„์ ํ•ด๊ฐ€๋ฉฐ ์†Œ์ˆ˜์ธ์ง€ ๋น„๊ตํ•œ๋‹ค. 
    do
    {
        string tmp;
        for(int i = 0; i < numbers.size(); ++i)
        {
            tmp += numbers[i];
            if(isPrime(stoi(tmp))) 
                ans.insert(stoi(tmp));      // set์ด๋ฏ€๋กœ ์†Œ์ˆ˜์ธ ์ˆซ์ž ์กฐํ•ฉ๋“ค์„ ์ค‘๋ณต์—†์ด ๋‹ด๋Š”๋‹ค.
        }
    }
    while(next_permutation(numbers.begin(), numbers.end()));
     
    answer = ans.size();
        
    return answer;
}

์ด ๋ฌธ์ œ๋Š” '์†Œ์ˆ˜ ํŒ๋ณ„ ํ•˜๊ธฐ'์™€ '๋ฌธ์ž๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์ˆซ์ž ์ฐพ๊ธฐ' ๊ฐ€ ๊ด€๊ฑด์ธ ๋ฌธ์ œ์˜€๋‹ค.

 

1. ์†Œ์ˆ˜ ํŒ๋ณ„ํ•˜๊ธฐ

์˜ˆ๋ฅผ ๋“ค์–ด 16์ด๋ผ๋Š” ์ˆ˜์˜ ์•ฝ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • 1 X 16 = 16 _________
  • 2 X 8 = 16   ___               |
  • 4 X 4 = 16         |   ๋Œ€์นญ   ๋Œ€์นญ
  • 8 X 2 = 16   ___               |
  • 16 X 1 = 16 _________

๊ฐ€์šด๋ฐ ์•ฝ์ˆ˜ 4๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ ๋“ฑ์‹์ด ๋Œ€์นญ์ ์ธ ํ˜•ํƒœ๋ฅผ ๋ณด์ธ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด 2 X 8 = 16์€ 8 X 2 = 16๊ณผ ๋Œ€์นญ์ด๋‹ค.

๊ทธ๋ ‡๊ธฐ์— ํŠน์ •ํ•œ ์ž์—ฐ์ˆ˜ X๊ฐ€ ์†Œ์ˆ˜์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๋ฐ”๋กœ ๊ฐ€์šด๋ฐ ์•ฝ์ˆ˜๊นŒ์ง€๋งŒ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š”์ง€ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.

๋‹ค์‹œ ๋งํ•ด ์ œ๊ณฑ๊ทผ๊นŒ์ง€๋งŒ(๊ฐ€์šด๋ฐ ์•ฝ์ˆ˜๊นŒ์ง€๋งŒ) ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค!!

 

2. ๋ฌธ์ž๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์ˆซ์ž ์ฐพ๊ธฐ

algorithm ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ next_permutation ์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ž˜ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

-  next_permutation ์ด๋ž€?

bool next_permutation (BidirectionalIterator first, BidirectionalIterator last);

next_permutation ํ•จ์ˆ˜์— ๋ฒกํ„ฐ์˜ iterator ํ˜น์€ ๋ฐฐ์—ด์˜ ์ฃผ์†Œ๋ฅผ ๋„ฃ์œผ๋ฉด ๋‹ค์Œ ์ˆœ์—ด(1-2-3-4์˜ ๋‹ค์Œ ์ˆœ์—ด์€ 1-2-4-3)์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋ฒกํ„ฐ๋‚˜ ๋ฐฐ์—ด์— ์ ์šฉ๋œ๋‹ค.

- next_permutation ์˜ ๋ฐ˜ํ™˜๊ฐ’

์„ฑ๊ณต์ ์œผ๋กœ ์ˆœ์—ด์„ ์ƒ์„ฑํ–ˆ๋‹ค๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ 

๋ชจ๋“  ์ˆœ์—ด์„ ์ƒ์„ฑํ•ด ๋‹ค์Œ ์ˆœ์—ด์ด ์—†๋‹ค๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

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

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

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ํ”ผ๋กœ๋„(C++)  (0) 2023.04.01
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ์นดํŽซ(C++)  (0) 2023.03.30
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.1 / ๋ชจ์˜๊ณ ์‚ฌ(C++)  (0) 2023.03.27
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.1 / ์ตœ์†Œ์ง์‚ฌ๊ฐํ˜•(C++)  (0) 2023.03.27
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / H-Index(C++)  (0) 2023.03.24
'๐Ÿ–ฅ๏ธ Study Note/Coding Test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ํ”ผ๋กœ๋„(C++)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ์นดํŽซ(C++)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.1 / ๋ชจ์˜๊ณ ์‚ฌ(C++)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.1 / ์ตœ์†Œ์ง์‚ฌ๊ฐํ˜•(C++)
Beankong_
Beankong_
์ฃผ๋‹ˆ์–ด ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋ž˜๋จธ ๊ณต๋ถ€ ๊ธฐ๋ก
  • Beankong_
    Beankong's Devlog
    Beankong_
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด ๊ธ€ (141) N
      • โ›… Daily (0)
      • ๐Ÿ–ฅ๏ธ Study Note (135) N
        • Unreal Engine (5) N
        • Coding Test (123)
        • Design Patteren (5)
        • VCS (Git..) (1)
        • Server (1)
      • ๐Ÿงญ Devlog (6)
        • ์˜ค๋‹ต๋…ธํŠธ (2)
        • UE5 GameLift Server Test Project (1)
        • TIL (3)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
Beankong_
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ์†Œ์ˆ˜ ์ฐพ๊ธฐ(C++)
์ƒ๋‹จ์œผ๋กœ

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