알고리즘
프로그래머스 n^2 배열 자르기 (JAVA)
박카스마시며코딩
2022. 5. 31. 14:30
https://programmers.co.kr/learn/courses/30/lessons/87390
코딩테스트 연습 - n^2 배열 자르기
정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다. n행 n열 크기의 비어있는 2차원 배열을 만듭니다. i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다. 1행 1열부
programmers.co.kr
저는 구현을 통해서 문제를 해결하였습니다.
저는 배열을 만들고 자르고 하지 않고 규칙을 찾아서 문제를 해결하였습니다.
각각의 값이 0,0과 얼마나 떨어져 있냐라기 보다는 행과 열중에 큰 값에 따라 배열 안의 값이 결정 된다는 것을 찾았습니다.
이를 통해 left와 right의 좌표를 찾고 left에서 right까지 가는데 까지의 값을 구하고 이를 결과값에 넣어 문제를 해결하였습니다.
import java.util.*;
class Solution {
public int[] solution(int n, long left, long right) {
int grap = (int)(right - left);
int[] answer = new int[grap + 1];
long startY = left / n;
long startX = left % n;
long endY = right / n;
long endX = right % n;
long[] start = new long[] {startY,startX};
int index = 0;
while(true){
answer[index++] = findValue(start,n);
if(start[0] ==endY && start[1] == endX){
break;
}
nextPosition(start,n);
}
return answer;
}
private void nextPosition(long[] position,int n){
position[1]++;
if(position[1] >= n){
position[1] = 0;
position[0]++;
}
}
private int findValue(long[] position,int n){
int value = (int)Math.max(position[0],position[1]);
return value + 1;
}
}