Devtraces
개발자취
Devtraces
전체 방문자
오늘
어제
  • 분류 전체보기
    • Baekjoon
    • Programmers

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Dijkstra
  • Set
  • union-find
  • math
  • Matrix
  • floyd-warshall
  • 백준
  • binary search
  • recursive
  • Queue
  • GCD
  • Tree
  • map
  • programmers
  • stack
  • DP
  • Kakao
  • greedy
  • two pointer
  • sort
  • level3
  • 그리디 알고리즘
  • Trie
  • level4
  • PriorityQueue
  • java
  • dfs
  • BFS
  • level2
  • prime number

최근 댓글

최근 글

티스토리

Devtraces
[프로그래머스 Level.2] n^2 배열 자르기 (월간 코드 챌린지 시즌3) (Java)
Programmers

[프로그래머스 Level.2] n^2 배열 자르기 (월간 코드 챌린지 시즌3) (Java)

2022. 12. 14. 02:55

문제 링크

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

 

프로그래머스

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

programmers.co.kr

 

 

코딩테스트 연습 > 월간 코드 챌린지 시즌3 > n^2 배열 자르기

 

 

 

문제 설명

 

 

정수 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

 


 

입출력 예
n left right result
3 2 5 [3,2,2,3]
4 7 14 [4,3,3,3,4,4,4,4]

 


 
입출력 예 설명

 

입출력 예 #1

  • 다음 애니메이션은 주어진 과정대로 1차원 배열을 만드는 과정을 나타낸 것입니다.

 

 

 

입출력 예 #2

  • 다음 애니메이션은 주어진 과정대로 1차원 배열을 만드는 과정을 나타낸 것입니다.

 

 

 

 

 

나의 코드

import java.util.*;

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

 

풀이

  1. n이 최대 10^7 이므로 2차원 배열을 만들어서 풀면 O(n^2)이 되어 실패한다.
  2. left와 right가 long 형이기 때문에 int형으로 변환해야 할 때 형변환 하는 것을 유의해야한다.
  3. 우선 answer는 left부터 right까지 이므로 answer의 크기는 right - left + 1이 된다.
  4. 그리고 while문을 돌면서 조건에 따라 answer에 수를 담아주면 된다.
  5. 문제에 주어진 조건에 따라 만든 행렬을 보면 행, 열 중에서 큰 index 값의 수가 해당 자리의 수가 된다.
  6. n*n 배열일 때, 행은 left / n + 1으로 열은 left % n + 1로 구할 수 있다. +1을 해주는 것은 index는 0부터 시작하므로 index + 1이 그 자리의 수가 되는 것이다.

 

 

'Programmers' 카테고리의 다른 글

[프로그래머스 Level.2] [3차] 압축 (2018 KAKAO BLIND RECRUITMENT) (Java)  (0) 2022.12.14
[프로그래머스 Level.2] [1차] 뉴스 클러스터링 (2018 KAKAO BLIND RECRUITMENT) (Java)  (0) 2022.12.14
[프로그래머스 Level.2] 더 맵게 (힙(Heap)) (Java)  (2) 2022.12.14
[프로그래머스 Level.2] 타겟 넘버 (깊이/너비 우선 탐색(DFS/BFS)) (Java)  (0) 2022.12.14
[프로그래머스 Level.2] 피로도 (완전탐색) (Java)  (0) 2022.12.13
    'Programmers' 카테고리의 다른 글
    • [프로그래머스 Level.2] [3차] 압축 (2018 KAKAO BLIND RECRUITMENT) (Java)
    • [프로그래머스 Level.2] [1차] 뉴스 클러스터링 (2018 KAKAO BLIND RECRUITMENT) (Java)
    • [프로그래머스 Level.2] 더 맵게 (힙(Heap)) (Java)
    • [프로그래머스 Level.2] 타겟 넘버 (깊이/너비 우선 탐색(DFS/BFS)) (Java)
    Devtraces
    Devtraces

    티스토리툴바