떵호
seongho'Dev
떵호
전체 방문자
오늘
어제
  • 분류 전체보기 (116)
    • 회고 (2)
    • Algorithm (74)
      • 프로그래머스 (65)
      • 백준(BOJ) (2)
      • Note (7)
    • 기술독서 (25)
      • Clean Code (11)
      • 자바의 정석 (8)
      • 대규모 시스템 설계 기초 (6)
    • Computer Science (1)
      • Operating System (1)
    • Typescript (1)
    • JAVA (0)
    • Spring (6)
      • JPA (6)
    • AWS (2)
    • Git (2)
    • Etc (2)

블로그 메뉴

  • github

티스토리

태그

  • Clean Code
  • 카카오 코테
  • 코딩테스트 준비
  • 자바의 정석
  • JPA
  • 알고리즘
  • 클린코드
  • 완전탐색
  • 구현
  • 프로그래머스
hELLO · Designed By 정상우.
떵호

seongho'Dev

[Java] 프로그래머스 Lv2 - n^2 배열 자르기
Algorithm/프로그래머스

[Java] 프로그래머스 Lv2 - n^2 배열 자르기

2022. 4. 12. 16:37
728x90
 

코딩테스트 연습 - n^2 배열 자르기

정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다. n행 n열 크기의 비어있는 2차원 배열을 만듭니다. i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다. 1행 1열부

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
  • left - right < 105

🖨 입출력 예

n left right result
3 2 5 [3,2,2,3]
4 7 14 [4,3,3,3,4,4,4,4]

📂 분류

구현

💡 풀이

n이 최대 107까지 주어지므로 2차원 배열을 만들어 구현하는 방식으로는 문제를 해결하지 못한다.

따라서 2차원 배열을 직접 구현하지 않고 1차원 배열을 이용해 문제를 풀어야 한다. 여기서 n x n 배열일 때, (i / n) + 1 은 행의 값이 되고, (i % n) + 1은 열의 값이 된다.

  0 1 2 3
0 1 2 3 4
1 2 2 3 4
2 3 3 3 4
3 4 4 4 4

위 행렬을 보면 arr[row][col]는 row와 col 중 큰 값 + 1이 되는 것을 알 수 있다.

따라서 left부터 right까지 반복하면서 answer에 max(row, col) + 1을 저장해주면 된다.

💻 코드

public class Solution {

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

        int idx = 0;
        for (long i = left; i <= right; i++) {
            long row = i / n;
            long col = i % n;
            answer[idx++] = Math.max((int)row, (int)col) + 1;
        }
        
        return answer;
    }
}
728x90
저작자표시 (새창열림)

'Algorithm > 프로그래머스' 카테고리의 다른 글

[Java] 프로그래머스 Lv2 - 스킬트리  (0) 2022.04.15
[Java] 프로그래머스 Lv2 - 쿼드압축 후 개수 세기  (1) 2022.04.13
[Java] 프로그래머스 - 로또의 최고 순위와 최저 순위(Level 1)  (0) 2022.04.10
[Java] 프로그래머스 - 점프와 순간 이동 (Level 2)  (0) 2022.04.09
[JAVA 풀이] 프로그래머스 - 이진 변환 반복하기 (Level2)  (0) 2022.04.07
    'Algorithm/프로그래머스' 카테고리의 다른 글
    • [Java] 프로그래머스 Lv2 - 스킬트리
    • [Java] 프로그래머스 Lv2 - 쿼드압축 후 개수 세기
    • [Java] 프로그래머스 - 로또의 최고 순위와 최저 순위(Level 1)
    • [Java] 프로그래머스 - 점프와 순간 이동 (Level 2)
    떵호
    떵호

    티스토리툴바