백준 2312번 수 복원하기 [C++]

2024. 6. 26. 17:24· [백준]/C++
목차
  1. #문제 간단 정리
  2. #문제 해결 방법
  3. #전체 코드
반응형

 

https://www.acmicpc.net/problem/2312

 

 

 

#문제 간단 정리

 

N을 소인수분해한 결과를 출력

 

 

#문제 해결 방법

 

우선 첫째로 소인수 분해를 하기 위해

소수들로 나눠줘야 하는데

 

그렇기 때문에 1. 소수를 구해야 한다

 

소수를 구하는 방법은 여러가지 방법이 있지만

브루트포스로 1부터 N까지 소수를 구하거나 하면 너무 시간이 오래 걸리니

에라토스테네스로 소수를 구해서 

소수들만 따로 구해주도록한다.

 

그렇다면 이제 주어진 수를 소수로 나누고 개수를 카운팅해야된다

2. 소수로 나누고 개수를 카운팅해야된다

에라토스테네스의 체로 구한 소수들로 계속해서 나눠서 소인수분해한 결과를

담는 것은 어렵지 않다.

 

그런데 만약에 2x2x3 이렇게 되있다면 2가 두번 중복 되기 때문에

2 2 이렇게 (숫자) (개수) 로 한번에 출력해야 되기 때문에

나는 map 을 사용해서 map에 이미 존재한다면 map 의 키 값을 증가시켜줘 

개수를 세어줬다.

 

 

#전체 코드

 

에라토스테네스의 체는 https://dfdfg42.tistory.com/entry/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98-%EC%B2%B4-C-%EC%BD%94%EB%93%9C

 

에라토스테네스의 체 C++ 코드

https://www.acmicpc.net/problem/2960#include #include #include #include #include using namespace std;bool check[1000001];int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, k; cin >> n >> k; int count = -1; for (int i = 2; i

dfdfg42.tistory.com

를 참고하도록 하자(모른다면)

 

#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <map>

using namespace std;


const int MAX = 100'000;

bool check[MAX + 1];
vector<int> primes;
vector<int> factors;

void Factorization(int num) {

    for (int i : primes) {
        if (num % i == 0) {
            factors.push_back(i);
            Factorization(num / i);
            break;
        }
    }

    return;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);



    for (int i = 2; i <= MAX; i++) {

        if (check[i] == false) {
            primes.push_back(i);

            for (int j = i; j <= MAX; j += i) {
                if (check[j] == false) {
                    check[j] = true;

                }
            }
        }

    }


    int t;
    cin >> t;

    for (int i = 0; i < t; i++) {
        int a;
        cin >> a;


        Factorization(a);

        map<int, int> factorCount;
        for (int f : factors) {
            if (factorCount.find(f) != factorCount.end()) {
                factorCount[f]++;
            }
            else {
                factorCount[f] = 1;
            }
        }

        for ( auto& pair : factorCount) {
            cout << pair.first << " " << pair.second << '\n';
        }

        factors.clear();
        factorCount.clear();
    }

    return 0;
}
반응형

'[백준] > C++' 카테고리의 다른 글

백준 31718번 Double Up [C++]  (0) 2024.07.04
백준 15831번 준표의 조약돌[C++]  (0) 2024.07.01
백준 11721번 열 개씩 끊어 출력하기 [C++]  (0) 2024.06.19
백준 1786번 찾기 [C++]  (0) 2024.06.18
백준 9742번 순열 [C++]  (2) 2024.06.18
  1. #문제 간단 정리
  2. #문제 해결 방법
  3. #전체 코드
'[백준]/C++' 카테고리의 다른 글
  • 백준 31718번 Double Up [C++]
  • 백준 15831번 준표의 조약돌[C++]
  • 백준 11721번 열 개씩 끊어 출력하기 [C++]
  • 백준 1786번 찾기 [C++]
경우42
경우42
개발 등 공부기록용 블로그입니다
경우42
경우없는 개발 블로그
경우42
전체
오늘
어제
  • 분류 전체보기 (225)
    • 후기 (1)
    • [Codeforces] (4)
    • [SW Expert Academy] (10)
    • [백준] (149)
      • C++ (144)
      • C# (4)
      • python (1)
    • [프로그래머스] (15)
      • lv.3 (8)
      • lv.2 (4)
      • lv.1 (3)
    • [CS(Computer Science)] (2)
      • 자료구조 (2)
    • 알고리즘 (32)
      • Tip (6)
      • 코드 (15)
      • SQL 문법 정리 (10)
    • 웹개발지식 (2)
    • 스프링 (2)
    • 딥러닝 (0)
    • [가톨릭대주변음식점] (2)
      • 런칭&모니터링 (0)
      • 개발 (0)
      • 트러블 슈팅 (2)
    • [만냠-밥약속매칭플랫폼] (1)
    • [일정정리 웹 개발] (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 10989번
  • 플로이드-워셜
  • 2751번
  • 냠톨릭
  • 프로그래머스
  • 백준
  • 10845번
  • c#
  • 14246번
  • C++
  • 17352번
  • lv.2
  • 9012번
  • 4920번
  • 두 포인터
  • 11365번
  • 2003번
  • 5585번
  • 코드 #다익스트라
  • 133300번

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
경우42
백준 2312번 수 복원하기 [C++]
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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