일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 프로그래머스 #JAVA #코딩테스트 #다음에 올 숫자 #코딩
- JAVA #객체지향언어 #절차지향언어 #코딩 #Python #C #C++ #객체지향 #절차지향
- 프로그래머스 #자바 #java #코딩테스트 #연속된 수의 합 #코딩
Archives
- Today
- Total
Javadocs
[ Programmers ] Lv.2 n^2 배열 자르기 본문
[ 문제설명 ]
정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다.
- n행 n열 크기의 비어있는 2차원 배열을 만듭니다.
- i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다
- 1행 1열부터 i행 i열까지의 영역 내의 모든 빈 칸을 숫자 i로 채웁니다.
- 1행, 2행, ..., n행을 잘라내어 모두 이어붙인 새로운 1차원 배열을 만듭니다.
- 새로운 1차원 배열을 arr이라 할 때, arr [left], arr [left+1], ..., arr [right]만 남기고 나머지는 지웁니다.
정수 n, left, right가 매개변수로 주어집니다. 주어진 과정대로 만들어진 1차원 배열을 return 하도록 solution 함수를 완성해주세요.
[ 제한사항 ]
- 1 ≤ n ≤ 10^7
- 0 ≤ left ≤ right < n^2
- right - left < 10^5
[ 입출력 예 ]
n | left | right | result |
3 | 2 | 5 | [3, 2, 2, 3] |
4 | 7 | 14 | [4, 3, 3, 3, 4, 4, 4, 4] |
public class ArraySlice {
public static int[] solution(int n, long left, long right) {
// 출력하는 배열의 개수
int[] answer = new int[(int) (right-left+1)]; // (right-left+1)는 long값이므로 int형으로 형변환
// long row = left/n + 1; // 주어진 left에서 시작하는(행,열)
// long col = left%n + 1;
for (int i = 0; i<answer.length; i++) {
// 시작하는(행,열)의 인덱스의 순서를 하나씩 더하면서 값을 정한다.
// n은 int형, left+i는 long형이므로 int형으로 형변환 해줘야한다.
int matrix = Math.max((int)(left+i)/n +1, (int)(left+i)%n +1);
answer[i] = matrix;
}
return answer;
}
public static void main(String[] args) { // 디버깅 실행을 위해 넣어준 것.
System.out.println(solution(4, 5, 10));
}
}
'SelfStudy > Programmers(코딩테스트)' 카테고리의 다른 글
[ Programmers ] 문자열 밀기 (Java) (0) | 2023.03.17 |
---|---|
[Programmers] OX 퀴즈 (0) | 2023.03.15 |
[ Programmers ] Lv.0 제곱수 판별하기(Java) (0) | 2023.03.10 |
[ Programmers ]Lv.0 연속된 수의 합 (JAVA) (1) | 2023.02.26 |
[ Programmers ]Lv.0 다음에 올 숫자 (JAVA) (0) | 2023.02.22 |
Comments