문제 링크는 다음과 같다
https://programmers.co.kr/learn/courses/30/lessons/64061
크레인으로 moves 배열의 원소(배열 인덱스)에 따라, board 배열에 있는 인형들을 뽑자.
뽑은 인형은 다른 상자에 넣는데, 만약 같은 인형이 2개 연속해서 나올시 터트리고 점수를 +2 하자.
풀이
코드
코드 링크
http://colorscripter.com/s/3OgxUDy
내가 대견하므로 사이다 사서 마시고... 이제 과제해야겟다
풀이에 도움을 준 라이브러리 조무사 아리가또함니다
https://colorscripter.com/s/3OgxUDy
프공 커엽노
헉!!!!! 고마워 헤헤
자랑스러워 ㅇㅅㅇ
냐하!!!!!!!!!!!!!!!!!!!!!
이게 코더와 프로그래머의 차이인가.. 대단 짝짝짝
저거 백준 브론즈 레베루 문제래... ;ㅅ;
그래두 칭찬해줘서 넘넘넘 고마워 ㅎ.ㅎ
저거 절대 브론즈 아님 실버 2~1 급은 된다고 생각함
헉.... 우우 전치행렬 알고리즘 짜는거 확실히 어려운더닽긴해.... 야호 그럼 난 실버를 푼거네! 야호야호!!!
상위 10^(-3)% 지구최강개발자
리액트 공주 글씨체 수준 ㄷㄷ - dc App
나 원래 엄청난 악필이어서 이번에 엄청 열심히 꾹꾹 눌러썻어
해당 댓글은 삭제되었습니다.
내 평소 글씨체는 지렁이래... 시험 문제 머라 쓴지 못읽으셔서 연락온적도 잇대....
글구 나 잘풀엇지 ㅎ.ㅎ
우욱...
재밌는 문제네
마자마자!!! 흐흐흐 2차원 배열에 대해 아직 난 잘 이해못하구 잇다는걸 다시금 깨달앗던 문제야 ㅠ~ㅠ
저 코드에 뭔 의미가 잇음?
전치하니 영을 없애니 하는게 의미가 잇나 그냥 맨위에거 주워담는코드 아님? 이해가 안가네
1. 전치행렬(= 행과 열을 바꾸기)을 하는 이유는, 크레인이 위에서 아래로(=열) 인형을 뽑기 때문이야. 반면 인형이 담긴 배열은 가로에서 세로로(=행) 움직이잖
그러니까 예제에서 board(인형상자) = 0 0 0 0 0 0 0 1 0 3 0 2 5 0 1 4 2 4 4 2 3 5 1 3 1 라고 나와있는데
우리가 인형의 위치를 board[i][j]라고 가정하자. 나는 board[4][0], 즉 3 이라는 인형을 뽑고 싶어. 근데 우리는 행인 board[4]는 접근할수있어. board[4]는 [3,5,1,3,1]이겠지 하지만 moves, 즉 크레인 위치는 인덱스 j에 해당해. 우리가 3이라는 인형을 뽑을때 board[4][0]이라는걸 파악하면 풀려.
즉 우리는 list같은 단방향 자료구조를 "행"으로서 접근하고, 크레인이 위에서 오른쪽 왼쪽 왔다리갓다리 하는 "열"에 해당되니 우리는 행과 열을 교체해주면(=전치행렬) 행으로 접근하는게 열으로 접근하는게 되겠지
2. 그렇게 전치행렬을 해주면 board^T는 0 0 0 4 3 0 0 2 2 5 0 1 5 4 1 0 0 0 4 3 0 3 1 2 1 이 돼
2. 그런데 0은 빈 공간이야. 따라서 우리는 0을 우리가 뽑은 인형상자(=basket)에 넣어버리면 안돼. 그렇게 해버리면 1. 만약 0이 동시에 뽑히면 2를 더해버릴 수 있거나 등등 2. 연속된 게 아닌데 연속했다고 판단해버릴 수 있겠지. 따라서 우리는 0을 제거해주는거야.
아하 혹시 저렇게 안풀어도 되어서 그렇게 표현한것 ?? ㅇㅅㅇ.... 혹시 보여줄수잇냥 ㅇㅅㅇ 다르게 푸는건 궁금하네
참고로 0을 제거안해도 if문으로 0이면 그냥 무시하고 그다음꺼 ㄱㄱ로 하면 된다만 어짜피 시간복잡도는 if문 검사하는 시간땜에 똑같겟거니, 그럼 그냥 0 제거하는게 훨 가독성 있겠다 싶어서 저렇게 햇어 ㅇㅅㅇ