본문 바로가기
Algorithm/Programmers Java

[JAVA] 프로그래머스 LEVEL2 n^2 배열 자르기

by 제우제우 2024. 10. 15.

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

 

프로그래머스

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

programmers.co.kr

코딩테스트 연습 > 월간 코드 챌린지 시즌3 > n^2 배열 자르기

 

난이도: LEVEL2

알고리즘 유형: 구현

 

문제 풀이 

left, right 좌표는 n*n 2차원 배열에서 좌표를 쉽게 구할 수 있다. 

행 순서대로 하나씩 이어 붙이는 순서이기 때문에 

 

1차원 배열에서 index가 k이면 

2차원 배열에서 행은 k / n 열은 k % n 이다. 

 

그럼 예시로 나온 

n = 3 left = 2 right = 5를 2차원 배열에서의 좌표로 변환해 보겠다. 

 

left

x = 2 / 3 = 0   y = 2 % 3 = 2       → (0, 2)

right

x = 5 / 3 = 1  y = 5 % 3 = 2        (1, 2)

 

2차원 배열의 숫자가 

1 2 3

2 2 3

3 3 3

이런 순서여서 

해당 좌표의 숫자를 구하는 식을 세우면 Math.max(x, y) + 1 이다.  

x = 행 y = 열 

정답 코드 

class Solution {
    public int[] solution(int n, long left, long right) {
        int [] answer = new int [(int)(right - left) + 1];
        int cnt = 0;
        for(long i = left; i <= right; i++){
            answer[cnt++] = (int) Math.max(i / n, i % n) + 1; 
        }
        return answer;
    }
}