알고리즘

[programmers] n^2 배열 자르기

졔졔311 2023. 6. 16. 22:01
728x90
반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

---------------------------------------------------핵심 알고리즘--------------------------------------------

 

math

 

---------------------------------------------------풀이----------------------------------------------------

 

left부터 right까지 각 숫자를 이용해서 row와 col 값을 계산한다.

0(0,0) 1(0,1) 2(0,2)
3(1,0) 4(1,1) 5(1,2)
6(2,0) 7(2,1) 8(2,2)

위는 일렬로 늘어놓았을 경우의 숫자와 (row,col)을 표시한 그림이다.

예를 들어 5면, row=5/3=1, col=5%3=2 가 된다.

 

이 때, 실제로 저장되는 값을 표현하면 다음과 같다.

1(0,0) 2(0,1) 3(0,2)
2(1,0) 2(1,1) 3(1,2)
3(2,0) 3(2,1) 3(2,2)

(row, col)과 저장되는 값 사이의 규칙을 찾아보면, max(row,col)임을 알 수 있다.

즉, 가로나 세로 방향 중 0,0에서 가장 멀리 떨어진 값이 저장되는 값이다.

이 규칙을 적용하여 left부터 right까지의 모든 부분에 대해 저장되는 값을 구해 저장한다.

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int n, long long left, long long right) {
    vector<int> answer;
    for(long long i = left; i <= right; i++){
        int row = i / n;
        int col = i % n;
        answer.push_back(1+max(row,col));
    }
    return answer;
}

 

---------------------------------------------------후기----------------------------------------------------

 

처음엔 규칙이 거리라고 생각해 row+col을 저장했다가, 그럼 완전히 오답이 나온다는걸 깨달아

그림을 그려보니 규칙이 보였다.

728x90
반응형

'알고리즘' 카테고리의 다른 글

[programmers] 전력망을 둘로 나누기  (0) 2023.06.22
[programmers] 교점에 별 만들기  (1) 2023.06.17
[programmers] 카운트 다운  (0) 2023.06.15
[programmers] 아이템 줍기  (2) 2023.06.09
[programmers] 할인 행사  (0) 2023.06.09