원하는 것은 뭐든지

99클럽 코테 스터디 1일차 TIL , n^2 배열 자르기 본문

개발/문제풀이

99클럽 코테 스터디 1일차 TIL , n^2 배열 자르기

댕로그😏 2024. 7. 22. 13:08
반응형

 

문제

 

풀이

주어진 left부터 right 까지만 구하면 된다.

n으로 나눈 값, 나머지 가 2차원 배열에서의 행과 열이 된다.

right와 left의 차는 10^5 미만이기 때문에 시간 초과가 발생하지 않는다.

위치에 해당하는 값은 행, 열 중 높은 값에 1을 더한 값과 같다.

제출 1 - 정답

class Solution {
    public int[] solution(int n, long left, long right) {
        int[] answer = new int[(int)(right - left) + 1];	//정답 배열
        int idx = 0;	//배열 인덱스

		//시작 
        long leftX = left / n;	
        long leftY = left % n;

		//끝
        long rightX = right / n;
        long rightY = right % n;
		
        //변수
        long x = leftX;
        long y = leftY;

        while(true){
            answer[idx++] = (int)(Math.max(x,y) + 1);	//x, y값 중 높은 값에 1더한 값 더하기
            if(x == rightX && y == rightY) break;	// right와 위치가 같으면 break
            else{
                if(n == y+1) {
                    y = 0;
                    x++;
                }else{
                    y++;
                }
            }
        }

        return answer;
    }
}

바로 생각나는 대로 작성해서 제출했다.

정답이었지만 코드가 깔끔하지 못해서 다시 생각했다.

 

제출 2 - 정답

class Solution {
    public int[] solution(int n, long left, long right) {
        int[] answer = new int[(int)(right - left) + 1];	//배열 생성
        
        for (long i = left; i <= right; i++) {
            answer[(int)(i - left)] = (int)(Math.max(i / n, i % n) + 1);
        }
        
        return answer;
    }
}

 

정답 배열이 right와 left의 차이만큼이기 때문에 반복문 또한 해당 차이만큼만 돌려준다.

n으로 나눈 값, 나머지 가 2차원 배열에서의 행과 열이기 때문에,

left에서 right로 가는 모든 수에서 위치를 구해 값을 넣어준다.

 

TIL

문제를 이해하는 시간이 오래 걸린다.

반복적인 학습이 필요하다고 느꼈다.

오늘처럼 생각한대로 풀이하고 리팩토링 하는 방법으로 몸에 익혀야겠다.

 

반응형
Comments