[Programmers] Lv2. 숫자 블둝 | C++

2023. 7. 4. 19:26ㆍCoding Test/Programmers

πŸ”—λ¬Έμ œ λ³΄λŸ¬κ°€κΈ°
 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

μ½”λ“œ μ€‘μ‹¬μ˜ 개발자 μ±„μš©. μŠ€νƒ 기반의 ν¬μ§€μ…˜ 맀칭. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ 개발자 λ§žμΆ€ν˜• ν”„λ‘œν•„μ„ λ“±λ‘ν•˜κ³ , λ‚˜μ™€ 기술 ꢁ합이 잘 λ§žλŠ” 기업듀을 맀칭 λ°›μœΌμ„Έμš”.

programmers.co.kr

 

πŸ‘¨‍πŸ’»ν’€μ΄ κ³Όμ •

 

  • n번째 블둝에 λ†“μ—¬μ§ˆ μˆ«μžλŠ” n이 μ†Œμˆ˜μΌ κ²½μš°μ—” 1, 아닐 κ²½μš°μ—λŠ” 10,000,000보닀 μž‘μ€ 제일 큰 μ•½μˆ˜μž…λ‹ˆλ‹€.
  • 제곱근 방식을 μ΄μš©ν•˜μ—¬ μ•½μˆ˜μ™€ μ†Œμˆ˜λ₯Ό μ°ΎλŠ” 데에 μ‹œκ°„μ„ 효율적으둜 μ ˆμ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬ μ κ²€ν•˜λ €λŠ” 숫자λ₯Ό i라고 ν•œλ‹€λ©΄,
    • n / i \( \leq 10,000,000 \) 이라면, n / iκ°€ κ°€μž₯ 큰 μ•½μˆ˜κ°€ λ©λ‹ˆλ‹€. κ°€μž₯ 큰 μ•½μˆ˜λ₯Ό μ°Ύμ•˜μœΌλ―€λ‘œ λ°˜λ³΅λ¬Έμ„ μ’…λ£Œν•©λ‹ˆλ‹€.
    • μ•„λ‹ˆλΌλ©΄, iλ₯Ό μ„ νƒν•œ 후에 λ‹€μŒ λ£¨ν”„λ‘œ λ„˜μ–΄κ°€λ„λ‘ ν•©λ‹ˆλ‹€.
  • n이 1인 κ²½μš°μ—λŠ” 0이 적힌 블둝이 μžˆμ–΄μ•Ό ν•˜λ―€λ‘œ, 이 λΆ€λΆ„λ§Œ μ˜ˆμ™Έ 처리λ₯Ό 해주도둝 ν•©λ‹ˆλ‹€.

 

블둝 μˆ«μžκ°€ 10,000,000보닀 크면 μ•ˆ λœλ‹€λŠ” μ μ—μ„œ 많이 ν—€λ§Έλ˜ 문제인 것 κ°™μŠ΅λ‹ˆλ‹€.

 

βœοΈμ†ŒμŠ€ μ½”λ“œ 및 κ²°κ³Ό

#include <vector>
using namespace std;
const int MAX_VALUE = 10000000;

long long FindMaxDivisor(long long n) {
    long long result = 1;

    for (long long i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            result = i;

            if (n / i <= MAX_VALUE) {
                result = n / i;
                break;
            }
        }
    }

    return result;
}

vector<int> solution(long long begin, long long end) {
    vector<int> answer;

    for (long long i = begin; i <= end; i++) {
        if (i == 1) {
            answer.emplace_back(0);
            continue;
        }
        answer.emplace_back(FindMaxDivisor(i));
    }

    return answer;
}

 

 

728x90
λ°˜μ‘ν˜•