✔ n^2 배열 자르기
문제 분석하기
row와 column 값 중에서 더 큰 값 + 1이 현재 자리의 값이 됨
예) n = 3, left = 2, right = 5
0 | 1 | 2 | |
0 | 1 (0 + 1) |
2 (1 + 1) |
3 (2 + 1) |
1 | 2 (1 + 1) |
2 (1 + 1) |
3 (2 + 1) |
2 | 3 (2 + 1) |
3 (2 + 1) |
3 (2 + 1) |
1 | 2 | 3 | 2 | 2 | 3 | 3 | 3 | 3 |
손으로 풀어보기
- left, right에 해당하는 범위만큼을 반복
- row와 column 값 중에서 더 큰 값 + 1로 현재 자리의 값을 채움
- row = i / n
- column = i % n
슈도코드 작성하기
n, left, right(정수)
answer(주어진 과정대로 만들어진 1차원 배열)
index(배열 위치 인덱스)
for(i -> left부터 right까지) {
row(행 값) = i / n
column(열 값) = i % n
answer[index] = Math.max(row, column) + 1
}
answer 반환
코드 구현하기
/**
* 87390) n^2_배열_자르기
*/
public class L072_87390 {
// n, left, right(정수)
public int[] solution(int n, long left, long right) {
// answer(주어진 과정대로 만들어진 1차원 배열)
int[] answer = new int[(int) (right - left + 1)];
// index(배열 위치 인덱스)
int index = 0;
for (long i = left; i <= right; i++) {
// row(행 값)
long row = i / n;
// column(열 값)
long column = i % n;
// Math.max(row, column) + 1을 저장
answer[index++] = (int) Math.max(row, column) + 1;
}
// answer 반환
return answer;
}
// 테스트 케이스
public static void main(String[] args) {
L072_87390 solution = new L072_87390();
int n = 3;
long left = 2;
long right = 5;
int[] result = solution.solution(n, left, right);
System.out.println(Arrays.toString(result));
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[92341] 주차 요금 계산 (0) | 2024.01.31 |
---|---|
[92335] K진수에서 소수 개수 구하기 (0) | 2024.01.31 |
[87377] 교점에 별 만들기 (0) | 2024.01.30 |
[86052] 빛의 경로 사이클 (0) | 2024.01.29 |
[81302] 거리두기 확인하기 (0) | 2024.01.28 |