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

728x90

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

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

 

프로그래머스

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

programmers.co.kr


접근

 

n = 4일 때의 배열은 다음과 같다.

잘 보면 행의 위치나 열의 위치 중에 더 큰 값으로 값이 결정되는 것을 확인할 수 있다.

빨간색 구간은 행과 열이 3으로 같은 구간이다. 파란색 구간의 경우 행 또는 열 한쪽이 더 큰 값을 가지므로 더 큰 값으로 할당되었다.

answer라는 배열이 일차원 배열을 요구하므로,

반복문을 left부터 right까지의 범위로 돌린다고 할 때,

answer[i - left] = Math.max(i % n, i / n) + 1;

위와 같은 형태로 값을 구할 수 있다. i%n + 1은 해당 인덱스의 열 번호, i/n + 1은 행 번호가 되기 때문이다.

그런데 문제는 위와같은 제한사항이다.

자바에서 long타입의 값을 무리하게 int로 형변환 할 경우 값 손실 관련 에러가 발생할 수 있다.

 

따라서 long과 int가 섞여서 연산되지 않도록 신경 써서 코드를 다시 작성해야 했다.

 

 

코드

import java.util.*;

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

        return answer;
    }
}
728x90