본문 바로가기

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

 

프로그래머스

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

programmers.co.kr

 

class Solution {
    public int[] solution(int n, long left, long right) {
        int leng = (int)(right-left+1L);
        int[] answer = new int[leng];
        long nL = (long)n;
       
       int lr; 
        if(left==0L) lr=0;
        else lr = (int)(left/nL);
        
        int lc;
        if(left==0L) lc=0;
        else if((int)(left%nL)==0) lc=n-1;
        else lc = (int)(left%nL);
        
        int x=0;
        while(x<leng) {
            if(lc>=lr) {answer[x]=lc+1; lc++;}
            else {answer[x]=lr+1; lc++;}
            if(lc>=n) {
                lc=0;
                lr++;
            }
            x++;
        }
        return answer;
}}

문제의 표에서 행 인덱스(lr left row)가 열 인덱스(lc left column)보다 작거나 같으면 1,2,3....n에서 원래 숫자를 유지할수있고 그게 아니라면 숫자가 바뀐다.(바뀐 숫자는 lr+1로 일정)

먼저 left/n, left%n으로 lr과 lc를 구해준다. 이때 long타입을 (int)로 형변환을 해주어야 한다.

그후 lc>=lr인 상황, 그 반대인 상황 각각 알맞게 처리해준 후 lc를 1씩 증가시키고, lc>=n이면 lc를 다시 0으로 초기화한다.

 

내머내공 : 내 머리로 내가 공부했습니다

틀린 내용은 언제든지 알려주세요!!