프로그래머스 n² 배열 자르기

2024. 7. 12. 14:04· 알고리즘/문제풀이
목차
  1. 문제 설명 
  2. 제한사항 
  3. 문제풀이

https://school.programmers.co.kr/learn/courses/30/lessons/87390?language=java

문제 설명 

정수 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 ≤ 10⁷
  • 0 ≤ left ≤ right < n²
  • right - left < 10⁵

 

문제풀이

문제는 2차원 배열을 특정 방식으로 생성 후, 해당 배열의 일부 구간을 추출해야 합니다. 즉, 일부 구간만 구하면 되기 때문에 전체 배열을 생성하지 않고, 필요한 구간의 값을 효율적으로 구하는 방법을 사용합니다.

 

주어진 n의 크기의 2차원 배열을 다음과 같이 정의할 수 있습니다.

  • arr[i][j] = max(i, j) + 1

 

1차원 배열 index를 2차원 배열의 좌표 변환 및 값 계산 공식은 다음과 같습니다.

  • 행(row): index / n (index를 배열의 너비로 나눈 몫)
  • 열(col): index % n (index를 배열의 너비로 나눈 나머지)
  • 2차원 배열의 (row, col) 위치의 값은 max(row, col) + 1

 

예를 들어 n = 3, left = 2, right = 5인 경우

  1. index 2:
    • row = 2 / 3 = 0
    • col = 2 % 3 = 2
    • arr[0][2] = max(0, 2) + 1 = 3
  2. index 3:
    • row = 3 / 3 = 1
    • col = 3 % 3 = 0
    • arr[1][0] = max(1, 0) + 1 = 2 
  3. index 4:
    • row = 4 / 3 = 1
    • col = 4 % 3 = 1
    • arr[1][1] = max(1, 1) + 1 = 2
  4. index 5:
    • row = 5 / 3 = 1
    • col = 5 % 3 = 2
    • arr[1][2] = max(1, 2) + 1 = 3

index 2 ~ 5까지의 1차원 배열로 나타내면 [3, 2, 2, 3]입니다.

 

위 개념을 바탕으로 코드에 적용하면 다음과 같습니다.


            
class Solution {
public int[] solution(int n, long left, long right) {
int l = (int) (right - left + 1);
int[] answer = new int[len];
for (int i = 0; i < l; i++) {
long index = left + i;
int row = (int) (index / n);
int col = (int) (index % n);
answer[i] = Math.max(row, col) + 1;
}
return answer;
}
}

 

공간 복잡도: 0(right - left + 1) 또는 0(10⁵)

시간 복잡도: 0(right - left + 1) 또는 0(10⁵)

'알고리즘 > 문제풀이' 카테고리의 다른 글

백준 15990번: 1, 2, 3 더하기 5  (0) 2025.01.13
백준 2563번: 색종이  (0) 2024.08.28
프로그래머스 할인 행사  (0) 2024.05.07
프로그래머스 괄호 회전하기  (0) 2024.05.06
프로그래머스 귤 고르기  (0) 2024.04.29
  1. 문제 설명 
  2. 제한사항 
  3. 문제풀이
'알고리즘/문제풀이' 카테고리의 다른 글
  • 백준 15990번: 1, 2, 3 더하기 5
  • 백준 2563번: 색종이
  • 프로그래머스 할인 행사
  • 프로그래머스 괄호 회전하기
Hui._.
Hui._.
High hope
Hui._.
개발 일기
Hui._.
전체
오늘
어제
  • 분류 전체보기 (57)
    • Java (4)
    • Spring (26)
      • Spring Framework (6)
      • Spring Security (9)
      • JPA (11)
    • CS (2)
    • 알고리즘 (19)
      • 문제풀이 (16)
      • 자료구조 (3)
    • ETC (3)
    • Project (3)
      • Trouble Shooting (3)

블로그 메뉴

  • 홈
  • 글쓰기
  • 설정

공지사항

인기 글

태그

  • jpa
  • 유클리드
  • 스프링 시큐리티6.1
  • Spring Boot 3.2.3
  • 회원 기능
  • 최소공배수
  • 인터페이스
  • persist
  • Spring Security
  • 분리
  • dynamic programming
  • HashMap
  • 지연
  • 스프링 부트3
  • Oauth 2.0
  • 원칙
  • 호제법
  • 매핑
  • 최대공약수
  • 엔티티
  • Spring Security + JWT + OAuth 2.0
  • 프로그래머스
  • SOLID
  • 코딩테스트
  • 추상화
  • oauth
  • Spring Security 6.1
  • java
  • 알고리즘
  • jwt

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hui._.
프로그래머스 n² 배열 자르기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.