while(1) work();
반응형

링크

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

 

프로그래머스

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

programmers.co.kr

 

분류

연결 리스트(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());
    }
}
반응형
profile

while(1) work();

@유호건

❤️댓글은 언제나 힘이 됩니다❤️ 궁금한 점이나 잘못된 내용이 있다면 댓글로 남겨주세요.

검색 태그