본문 바로가기

프로그래밍38

[구현] 백준 14503: 로봇 청소기 오늘은 밀린 만큼 두 개를 복기하려 한다. 첫 번째 복기 대상 로봇 청소기이다. 14503번: 로봇 청소기 (acmicpc.net) 참고로, 북쪽의 왼쪽은 서쪽이다. 왜 너무 당연한 이런 얘기를 썼냐면... 북동남서 순으로 0,1,2,3이 배정되어 있기 때문이다. 나는 북쪽의 왼쪽->0의 다음은 1 .. 이렇게 멋대로 생각하다가 꽤나 삽질을 했다... 한 칸 씩 네 방향을 서치할 수 있게 dr, dc 배열과, 중간에 청소를 안 한 부분을 발견하여 빠져나갈 때 재귀호출의 '방향' 인풋으로 사용하기 위해 directions 배열을 만들었다. public class BOJ_14503 { static int N,M; static int[][] board; static int numCleaned = 0; //북-.. 2022. 7. 27.
[구현] 백준 20327: 배열 돌리기 6 여태 깨작깨작 PS를 하면서 어려운 문제들을 많이 만났다. 개중에는 지금 돌아보면 아무 것도 아닌 문제도 있지만,그 때는 또 그만큼 실력이 더 모자랐기 때문에... 브론즈 I/O 문제조차 당황하며 하루 종일 잡고 있던 때가 있었으니. 그런데 이 문제만큼 '볼륨'이 크다고 느낀 문제는 처음이었다. 보자마자 아, 그냥 튈까 하고 생각했지만 결국 극복해내지 못하면 다음 단계로 나아가지 못하기에 차분히 손을 댔다. 20327번: 배열 돌리기 6 (acmicpc.net) // 문제 예시가 너무 길어 링크로 첨부 아직 완전한 리뷰가 아니기에 간단하게만 쓰면, 배열의 부분배열들을 변경시키는 함수 8개를 구현해야 한다. 상하반전, 좌우반전, 우로 90도/좌로 90도 회전, 그리고 똑같은 논리로 '부분배열 자체'를 이동.. 2022. 7. 22.
[구현] 백준 16927: 배열 돌리기 2 앞으로 매일매일 포스팅을 하기로 했지만, 계절학기가 바빠지고 개인적인 일들이 생기면서 한참만에 포스팅을 한다. 우선 배열을 한 칸씩 반시계 방향으로 미루는 방법을 먼저 고안해야 했는데, 나는 큐를 만들어 그 큐에 배열의 테두리 값을 다 밀어넣고, 한 칸씩 미뤄서 큐를 이용해 다시 채워넣는 방식을 택했다. Queue q = new LinkedList(); //좌변 for(int i=init;i=init+1;i--){ q.offer(targetArr[init][i]); } //한 칸 씩 미뤄서 큐에 있는 값들을 밀어넣음. //좌변 for(int i=init+1;i=init;i--){ targetArr[init][i] = q.poll(); } 이렇게만 만들고 채점을 돌렸을 때 시간초과가 떴는데, 이 문제의 핵.. 2022. 7. 20.
[DP] BOJ_14501: 퇴사 난이도가 실버3로 그리 어렵다고 할 수 없는 문제임에도 엄청나게 애를 먹었다. PS를 하다 보면 이상한 데 꽂혀서 중요한 곳을 지나치고 어문 곳을 계속 빙빙 돌 때가 있는데, 그런 경우가 가장 난감한 것 같다. 이 문제의 경우에는 내가 '만약 첫째 날에 잡혀 있는 일정이 너무 오래 걸려 잡을 수 없는 예약인 경우' 를 고려하지 않고, 다른 곳에서 틀렸다고 쓸데없는 확신을 하여 여기저기 손대 보다가 망한 문제이다. 아마도 지금까지 풀어 온 '~한 ~수열 찾기' 류 문제들이 당연히 첫 번째 memoization은 자기 자신, 혹은 1이 되는 문제들이었기에 이런 실수를 한 것 같다. 우선 문제를 풀기 위해 소요 날짜를 나타내는 duration 배열, 보수를 나타내는 payment 배열, 그리고 memoizat.. 2022. 6. 29.