[C++] 프로그래머스 소수찾기 완전탐색

2021. 4. 23. 12:31·Algorithm/Programmers
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(string numbers) {
    int answer = 0;
    
    sort(numbers.rbegin(), numbers.rend());
    int num = stoi(numbers);
    
    vector<bool> visited(num + 1, false);
    
    for(int i = 2; i <= num; i++)	//소수를 찾는다.
    {
        if(!visited[i])
        {
            for(int j = i + i; j <= num; j += i)	//찾으면 그것의 배수들은 소수가 아니므로 다 표시
            {
                visited[j] = true;
            }
        }
    }
    
    for(int i = 2; i <= num; i++)
    {
        if(!visited[i])
        {
            string temp = to_string(i);	//갈 소수를 string으로 변환
            int counts = 0;
            vector<bool> numVisited(numbers.size());	//현재 numbers에서 방문한 곳이 있으면 표시
            
            for(int j = 0; j < temp.size(); j++)	//현재 소수에 필요한 자리만큼 반복
            {
                for(int k = 0; k < numbers.size(); k++)	//한 소수당 모든 numbers를 방문
                {
                    if(temp[j] == numbers[k] && !numVisited[k])	//수가 같고 방문 안 했을때만.
                    {
                        numVisited[k] = true;
                        counts++;
                        break;	//수가 같은 수가 있을 수 있으므로 
				//무조건 break로 나가서 다음자리수를 계산한다.
                    }
                }    
            }
            
            if(counts == temp.size())	//같은 수가 있는 개수가 소수의 자릿수와 같을 때
					//소수의 개수 하나추가
            {
                answer++;
            }
        }
    }//for(int i = 2; i <= num; i++)
    
    
    return answer;
}

 

풀이

  1. 최대 범위는 numbers를 최대 큰 숫자들로 정렬한 것과 같기 때문에 내림차순 정렬을 한다.
  2. 그 수를 int로 형변환한다.
  3. 소수가 아닌 것들을 판단하기 위해서 처음 나온 수가 있으면 그것의 배수들을 모두 체크해준다.
  4. 해당 소수들이 numbers안에 숫자가 들어 있나 한 자리씩 체크해준다.
저작자표시 (새창열림)

'Algorithm > Programmers' 카테고리의 다른 글

[C++] 프로그래머스 완주하지 못한 선수 해시  (0) 2021.04.23
[C++] 프로그래머스 카펫 완전탐색  (0) 2021.04.23
[C++] 프로그래머스 모의고사 완전탐색  (0) 2021.04.21
[C++] 프로그래머스 네트워크 DFS, BFS  (0) 2021.04.19
[C++] 프로그래머스 타겟넘버 DFS/BFS  (0) 2021.04.02
'Algorithm/Programmers' 카테고리의 다른 글
  • [C++] 프로그래머스 완주하지 못한 선수 해시
  • [C++] 프로그래머스 카펫 완전탐색
  • [C++] 프로그래머스 모의고사 완전탐색
  • [C++] 프로그래머스 네트워크 DFS, BFS
chanheess
chanheess
'왜' 그렇게 했는가?에 대한 생각으로 공부 및 작업의 저장관리
  • chanheess
    왜 그렇게 생각했는가?
    chanheess
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Backend Programming
      • Game Programming
        • Unreal
        • DirectX
      • C++
        • Memo
        • Basic
        • Effective Modern
      • Java
      • Algorithm
        • Memo
        • Baekjoon
        • Programmers
        • HackerRank, LeetCode
      • Data Structure
      • Design Pattern
      • Etc
        • Memo
        • Daily Log
        • Book
  • 최근 글

  • 최근 댓글

  • 태그

    c++ 기초 플러스
    spring
    오블완
    백준
    JPA
    위클리 챌린지
    dfs
    JWT
    티스토리챌린지
    dp
    Java
    SpringSecurity
    프로그래머스
    알고리즘
  • hELLO· Designed By정상우.v4.10.0
chanheess
[C++] 프로그래머스 소수찾기 완전탐색

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.