[programmers] Java Lv.2 - n^2 배열 자르기

2025. 1. 15. 11:24·Algorithm Solving/Java

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

문제 설명
정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다.

  1. n행 n열 크기의 비어있는 2차원 배열을 만듭니다.
  2.  i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다.
        1행 1열부터 i행 i열까지의 영역 내의 모든 빈 칸을 숫자 i로 채웁니다.
  3. 1행, 2행, ..., n행을 잘라내어 모두 이어붙인 새로운 1차원 배열을 만듭니다.
  4. 새로운 1차원 배열을 arr이라 할 때, arr[left], arr[left+1], ..., arr[right]만 남기고 나머지는 지웁니다.

정수 n, left, right가 매개변수로 주어집니다. 주어진 과정대로 만들어진 1차원 배열을 return 하도록 solution 함수를 완성해주세요.

 

제한사항
1 ≤ n ≤ 107
0 ≤ left ≤ right < n2
right - left < 105

 

입출력 예

 

입출력 예 설명

입출력 예 #1

 

입출력 예 #2

 


풀이

출력할 행/열 인덱스 계산

  • 2차원 배열 nxn을 1차원 배열로 만들었을 때
    • 1차원 배열의 인덱스 [ i ]의 요소 값은 2차원 배열의 [ i / n ][ i % n ]

 

틀린 풀이 😵

class Solution {
    public int[] solution(int n, long left, long right) {
        int[] answer = new int[(int)(right-left+1)];

        // nxn 배열 생성
        int[][] arr = new int[n][n];
        boolean[][] visited = new boolean[n][n];
        for (int i=0; i<n; i++) {
            for (int j=0; j<n; j++) {
                if (!visited[i][j]) {
                    arr[i][j] = j+1;
                    arr[j][i] = j+1;
                    visited[i][j] = true;
                    visited[j][i] = true;
                }
            }
        }

        // 위에서 생성한 배열이 1차원 배열로 됐다 치고 left와 rigth로 자른 배열 반환
        int answerIndex = 0;
        for (long i=left; i<=right; i++) {
            int arrRow = (int)(i / n);
            int arrCol = (int)(i % n);
            answer[answerIndex] = arr[arrRow][arrCol];
            answerIndex ++;
        }
        
        return answer;
    }
}

ㅠㅠ속상😿😿😿😿

틀린 이유:

nxn 배열을 직접 만들어서 틀렸다.

문제에서 n은 최대 10000까지 될 수 있고, 10000x10000 = 100000000개의 요소를 가지는 배열이 생성되면 메모리 초과가 된다.

nxn 배열 실제로 생성하지 않고, 필요한 값(left부터 right사이의 값)만 계산하여 풀어야한다.

 

수정:

for (long i=left; i<=right; i++) {
	int row = (int)(i / n);
	int col = (int)(i % n);
	answer[(int)(i - left)] = Math.max(row, col) + 1;
}
  • answer의 인덱스: answer은 크기가 right-left+1이므로, `i-left`로 계산
  • 값 계산
    • 각 위치 (rodw,col)에서의 값은 `Math.max(row, col) + 1`
    • 해당 행과 열 인덱스 중 더 큰 값에 1을 더한 값

 

풀이 코드

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        int n = 4;
        long left = 7;
        long right = 14;
        int[] answer = new int[(int)(right-left+1)];

        for (long i=left; i<=right; i++) {
            int row = (int)(i / n);
            int col = (int)(i % n);
            answer[(int)(i - left)] = Math.max(row, col) + 1;
        }

        System.out.println(Arrays.toString(answer));
    }
}

 


제출

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++) {
            int row = (int)(i / n);
            int col = (int)(i % n);
            answer[(int)(i - left)] = Math.max(row, col) + 1;
        }
        
        return answer;
    }
}
저작자표시 비영리 변경금지 (새창열림)

'Algorithm Solving > Java' 카테고리의 다른 글

[programmers] Java Lv.2 - 할인 행사  (2) 2025.01.21
[programmers] Java Lv.2 - 행렬의 곱셈  (1) 2025.01.16
[programmers] Java Lv.2 - H-Index  (1) 2025.01.14
[programmers] Java Lv.2 - 연속 부분 수열 합의 개수  (1) 2025.01.13
[programmers] Java Lv.2 - 괄호 회전하기  (1) 2025.01.10
'Algorithm Solving/Java' 카테고리의 다른 글
  • [programmers] Java Lv.2 - 할인 행사
  • [programmers] Java Lv.2 - 행렬의 곱셈
  • [programmers] Java Lv.2 - H-Index
  • [programmers] Java Lv.2 - 연속 부분 수열 합의 개수
기만나🐸
기만나🐸
공부한 내용을 기록합시다 🔥🔥🔥
  • 기만나🐸
    기만나의 공부 기록 🤓
    기만나🐸
  • 전체
    오늘
    어제
    • ALL (147)
      • TIL (Today I Learned) (56)
      • Dev Projects (15)
      • Algorithm Solving (67)
        • Java (52)
        • SQL (15)
      • Certifications (8)
        • 정보처리기사 실기 (8)
  • 인기 글

  • 태그

    BOJ
    Subquery
    jpa
    백트래킹
    완전탐색
    programmers
    Google Fonts
    bootstrap
    javascript
    시뮬레이션
    jQuery
    자료구조
    CSS
    GROUP BY
    다이나믹프로그래밍
    mysql
    HTML
    백준
    jwt
    sql
    DFS
    dp
    BFS
    Firebase
    java
    그리디
    greedy
    websocket
    프로그래머스
    join
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기만나🐸
[programmers] Java Lv.2 - n^2 배열 자르기
상단으로

티스토리툴바