Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 랜덤스쿼드
- D-ID
- 혼술 술자리 인싸앱
- 박스#강아지집#만들기
- #FIFAONLINE4
- 홈CCTV
- 강아지 #박스집 #복층
- 안드로이드 그림판#그림메모장#낙서장
- Java & SpringBoot로 시작하는 웹 프로그래밍
- 안드로이드#앱만들기#알바
- 불끌때
- 독서감상문
- 피온4
- fifaonline
- 안드로이드 #앱개발#계산기
- 부의감각
- 스쿼드 메이커
- 안녕 디지몬
- 강아지 스마트 펜스
- fifaonline4
- K디지털크레딧
- 내일배움카드
- 자바 인강
- 아두이노#작품#사료급식기
- Ai
- 안드로이드
- 패스트캠퍼스
- 바이트디그리
- 부르지마세요
- 랜덤
Archives
- Today
- Total
LC Studio
Programmers Lv2 행렬 테두리 회전하기 본문
https://programmers.co.kr/learn/courses/30/lessons/77485
주어진 테두리만큼 행렬을 회전시키고 최솟값을 찾는 문제였다.
어떻게 풀지 고민하다 결국 다른 블로그들을 찾아보고 아이디어를 얻었다.
풀이방식
1. matrix[][] 라는 2차원 기본배열 선언
2. 좌표값을 받아와 배열에 맞게 숫자를 변경(-1)
3. 초기값을 저장 및 최솟값으로 저장
4. 배열을 회전시킴 + 최솟값 비교
4-1 (왼쪽) 아래에서 위로
4-2 (아래) 왼쪽에서 오른쪽으로
4-3 (오른쪽) 위에서 아래로
4-4 (위) 오른쪽에서 왼쪽으로
5. 초기값을 다시 배열에 넣어줌
6. 최솟값 return
아래 코드와 주석을 함께보면 더 잘 이해될 것이다.
class Solution {
int[][] matrix;
public int[] solution(int rows, int columns, int[][] queries) {
this.matrix = new int[rows][columns];
int[] answer = new int[queries.length];
//기본 배열을 선언합니다
for(int i=0;i<rows;i++){
for(int j=0;j<columns;j++){
matrix[i][j] = i*columns+j+1;
}
}
//queries의 개수만큼 반복합니다
for(int i=0;i<queries.length;i++){
answer[i] = rotate(queries[i]);
}
return answer;
}
public int rotate(int[] query){
//좌표값을 받아와 배열의 좌표값으로 변환합니다
int x1 = query[0]-1;
int y1 = query[1]-1;
int x2 = query[2]-1;
int y2 = query[3]-1;
//시작위치의 값을 최솟값으로 저장해줍니다
int tmp = this.matrix[x1][y1];
int min = tmp;
//첫번째 회전
for(int i = x1;i<x2;i++){
this.matrix[i][y1] = this.matrix[i+1][y1];
if(min > this.matrix[i][y1]) min = this.matrix[i][y1];
}
//두번째 회전
for(int i = y1;i<y2;i++){
this.matrix[x2][i] = this.matrix[x2][i+1];
if(min > this.matrix[x2][i]) min = this.matrix[x2][i];
}
//세번째 회전
for(int i = x2;i>x1;i--){
this.matrix[i][y2] = this.matrix[i-1][y2];
if(min > this.matrix[i][y2]) min = this.matrix[i][y2];
}
//네번째 회전
for(int i = y2;i>y1;i--){
this.matrix[x1][i] = this.matrix[x1][i-1];
if(min > this.matrix[x1][i]) min = this.matrix[x1][i];
}
this.matrix[x1][y1+1] = tmp;
return min;
}
}
반응형
'Java > Programmers' 카테고리의 다른 글
Programmers Lv1 개인정보 수집 유효기간 (Kotlin) (0) | 2023.08.09 |
---|---|
Programmers Lv2 k 문자열 압축 (JAVA) (0) | 2022.05.06 |
Programmers Lv2 k 진수에서 소수 개수 구하기 (JAVA) (0) | 2022.03.29 |
Programmers Lv1 신고 결과 받기 (0) | 2022.03.28 |