반응형
링크
https://school.programmers.co.kr/learn/courses/30/lessons/118670
분류
연결 리스트(linked list)
개인적 난이도
매우 쉬움 | 쉬움 | 보통 | 어려움 | 매우 어려움 |
핵심 알고리즘
연결 리스트를 사용하되...
rotate 를 처리하기 위해 좌측 열과 우측 열의 경우 별도의 linked list로 관리
나머지는 각 row들을 linked list로 만들고, 이 row들을 또 linked list로 만듦
linked list만 떠올릴 수 있다면 쉬운 문제.
아래 코드에서도 핵심 로직은 7줄(rotate 4줄 shiftRow 3줄) 으로 모두 처리 가능했음.
시행착오
없음
코드
import java.util.*;
class Solution {
LinkedList<Integer> left = new LinkedList<>();
LinkedList<Integer> right = new LinkedList<>();
LinkedList<LinkedList<Integer>> rows = new LinkedList<>();
public int[][] solution(int[][] rc, String[] operations) {
int sizeC = rc[0].length, sizeR = rc.length;
for (int i = 0; i < sizeR; i++) {
LinkedList<Integer> row = new LinkedList<>();
for (int j = 1; j < sizeC - 1; j++) row.add(rc[i][j]);
left.add(rc[i][0]);
right.add(rc[i][sizeC - 1]);
rows.add(row);
}
for (int i = 0; i < operations.length; i++) {
if (operations[i].charAt(0) == 'R') rotate();
else shiftRow();
}
int[][] answer = new int[sizeR][sizeC];
for (int i = 0; i < sizeR; i++) {
LinkedList<Integer> row = rows.removeFirst();
for (int j = 1; j < sizeC - 1; j++) answer[i][j] = row.removeFirst();
answer[i][0] = left.removeFirst();
answer[i][sizeC - 1] = right.removeFirst();
}
return answer;
}
void shiftRow() {
left.addFirst(left.removeLast());
right.addFirst(right.removeLast());
rows.addFirst(rows.removeLast());
}
void rotate() {
rows.getFirst().addFirst(left.removeFirst());
right.addFirst(rows.getFirst().removeLast());
rows.getLast().addLast(right.removeLast());
left.addLast(rows.getLast().removeFirst());
}
}
반응형
'알고리즘 > 코딩테스트' 카테고리의 다른 글
[2022 카카오 인턴십 코테] 등산코스 정하기 (0) | 2022.09.18 |
---|---|
[2022 카카오 인턴십 코테] 코딩 테스트 공부 (0) | 2022.09.18 |
[2022 카카오 인턴십 코테] 두 큐 합 같게 만들기 (0) | 2022.09.18 |
[2022 카카오 인턴십 코테] 성격 유형 검사하기 (0) | 2022.09.18 |