JAVAIARY

프로그래머스 ) n^2 배열 자르기 본문

examplePractice

프로그래머스 ) n^2 배열 자르기

shiherlis 2023. 4. 3. 10:31

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

 

프로그래머스

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

programmers.co.kr

 

class Solution {
   public long[] solution(int n, long left, long right) {

		long[] answer = new long[(int) (right - left + 1)];
		
		long rw = left /n; 	// 시작 행
		long clmn = left % n;	// 시작 열
        int i = 0;
		// 시작 clmn이 0일 경우 반복문에서 바로 행이 증가되기 때문에 우선 1회 실행
			answer[i] = Math.max(rw, clmn) + 1;
            clmn++;
			i++;
		 while (i < right - left + 1) {
			clmn = clmn == n? 0 : clmn;	// 0 열로 초기화
			rw = clmn ==0? rw+1 : rw;	// clmn이 0일 경우 다음 행으로 이동
			answer[i] = Math.max(rw, clmn) + 1;
			clmn++;
			i++;
		}

		return answer;
	}
}
  • 시작행을 left/n, 열을 left%n잡고 1씩 증가 시키는 방향으로 가닥을 잡았음
  • 다음 배열의 행 , 열을 잡기가 힘들어서 clmn 이 n 초과 되면 초기화를 시켜주는 방식으로 해결

 

Math.max((left+i)/n, (left+i)%n)+1
  • 좀 더 생각해 봤다면 left+i 자체를 나누는 방식으로 해결할 수 있었을 것 같다.