코딍코딍
코딩기록
코딍코딍
전체 방문자
오늘
어제
  • 분류 전체보기 (271)
    • 개발 (2)
    • Java (1)
    • 스프링 (28)
    • JPA (11)
    • Git (3)
    • 알고리즘 (160)
      • 백준 (132)
      • 프로그래머스 (8)
      • SWEA (20)
    • 토이 프로젝트 (14)
      • 간단한 Springboot CRUD (1)
      • 게시판 프로젝트 (13)
    • 알고리즘 개념정리 (8)
    • 오류 해결 (13)
    • 보류 (0)
    • AWS (5)
    • 트러블 슈팅 (0)
    • 회고 (3)
    • CS (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

최근 글

티스토리

hELLO · Designed By 정상우.
코딍코딍
알고리즘/프로그래머스

행렬과 연산

알고리즘/프로그래머스

행렬과 연산

2023. 1. 16. 11:56

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

 

프로그래머스

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

programmers.co.kr

 

 

소스코드

import java.util.*;

class Solution {
    public int[][] solution(int[][] rc, String[] operations) {
        int[][] answer = rc;
        
        Deque<Integer> left = new ArrayDeque<>();
        Deque<Integer> right = new ArrayDeque<>();
        Deque<Deque<Integer>> mid = new ArrayDeque<>();

        for (int i = 0; i < rc.length; i++) {
            left.add(rc[i][0]);
            Deque<Integer> midDq = new ArrayDeque<>();
            for (int j = 1; j < rc[0].length - 1; j++) {
                midDq.add(rc[i][j]);
            }
            mid.add(midDq);
            right.add(rc[i][rc[0].length - 1]);
        }

        for (int i = 0; i < operations.length; i++) {
            if(operations[i].equals("ShiftRow")) {
                left.addFirst(left.pollLast());
                right.addFirst(right.pollLast());
                mid.addFirst(mid.pollLast());
            } else {
                mid.peekFirst().addFirst(left.pollFirst());
                right.addFirst(mid.peekFirst().pollLast());
                mid.peekLast().addLast(right.pollLast());
                left.addLast(mid.peekLast().pollFirst());
            }
        }

        for (int i = 0; i < rc.length; i++) {
            answer[i][0] = left.pollFirst();
            Deque<Integer> midDq = mid.pollFirst();
            for (int j = 1; j < rc[0].length - 1; j++) {
                answer[i][j] = midDq.pollFirst();
            }
            answer[i][rc[0].length - 1] = right.pollFirst();
        }

        return answer;
    }
}

 

 

해결방법

위 그림과 같이 left(Deque), mid(Deque<Deque>), right(Deque)로 나누어서 해결하였다.

빨간 표시 => "Rotate"

파란 표시 => "ShiftRow"

'알고리즘 > 프로그래머스' 카테고리의 다른 글

입국심사  (0) 2023.06.15
오픈채팅방  (0) 2023.06.14
디펜스 게임  (0) 2023.06.14
뒤에 있는 큰 수 찾기  (0) 2023.04.10
롤케이크 자르기  (0) 2023.03.24
  • 소스코드
  • 해결방법
'알고리즘/프로그래머스' 카테고리의 다른 글
  • 오픈채팅방
  • 디펜스 게임
  • 뒤에 있는 큰 수 찾기
  • 롤케이크 자르기
코딍코딍
코딍코딍
ㅎ2

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.