[Programmers] Lv2. n^2 λ°°μ—΄ 자λ₯΄κΈ° | C++

2023. 6. 14. 21:32ㆍCoding Test/Programmers

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

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

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

programmers.co.kr

 

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

 

\(n\)의 μ΅œλŒ€ κ°œμˆ˜κ°€ 천만 개라, 2차원 배열을 λ§Œλ“€μ–΄ 수λ₯Ό μ €μž₯ν•˜κ³ , λ‚˜λˆ—μ…ˆκ³Ό λͺ« 연산을 톡해 left ~ right μ‚¬μ΄μ˜ 숫자만 μΆ”μΆœν•˜λ©΄ λ˜μ§€ μ•Šμ„κΉŒ μƒκ°ν•˜μ—¬ μ½”λ“œλ₯Ό μ§°λŠ”λ°, μ‹œκ°„ μ΄ˆκ³Όκ°€ λ‚¬μŠ΅λ‹ˆλ‹€. μ‹œκ°„μ„ 더 쀄일 방도가 ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€.

방법을 λͺ¨μƒ‰ν•˜λ˜ 쀑, (i, j)에 μ €μž₯λ˜λŠ” μˆ«μžλŠ” max(i + 1, j + 1)μ΄λΌλŠ” νŠΉμ„±μ„ λ°œκ²¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

    0 1 2 3
  ---------
0 | 1 2 3 4
1 | 2 2 3 4
2 | 3 3 3 4
3 | 4 4 4 4

// #1
(0, 2)에 적힌 μˆ«μžλŠ”?  -> max(0 + 1, 2 + 1) = 3

// #2
(3, 1)에 적힌 μˆ«μžλŠ”?  -> max(3 + 1, 1 + 1) = 4

 

이와 같은 νŠΉμ„±κ³Ό ν–‰ = left / n, μ—΄ = left % n을 μ΄μš©ν•œλ‹€λ©΄ λΉ λ₯΄κ²Œ ꡬ할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

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

#include <vector>
using namespace std;

vector<int> solution(int n, long long left, long long right) {
    vector<int> answer;

    int row = left / n;
    int col = left % n;
    int count = right - left + 1;

    for (int i = 0; i < count; i++) {
        int num = max(row + 1, col + 1);
        answer.push_back(num);
        col++;

        if (col == n) {
            row += 1;
            col = 0;
        }
    }

    return answer;
}

 

 

 

728x90
λ°˜μ‘ν˜•