728x90
[Java] 프로그래머스 : n^2 배열 자르기
https://school.programmers.co.kr/learn/courses/30/lessons/87390
접근
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
'알고리즘 문제 풀이' 카테고리의 다른 글
[Java] 프로그래머스 : 의상 (0) | 2023.09.10 |
---|---|
[Java] 프로그래머스 : 괄호 회전하기 (0) | 2023.08.28 |
[Java] 프로그래머스 : 예상 대진표 (0) | 2023.08.25 |
[Java] 프로그래머스 : 구명보트 (0) | 2023.08.23 |
[Java] 프로그래머스 : 크레인 인형뽑기 게임 (0) | 2023.08.07 |