-
JAVA 택배상자꺼내기코딩테스트 2025. 3. 24. 16:41반응형
문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/389478
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
1부터 n까지의 번호를 가진 상자를 w 개씩 적층한 상자더미로부터 원하는 번호의 상자를 꺼낼 때, 위에서부터 해당 상자를 꺼내기까지의 필요한 상자 갯수를 구하는 문제이다.
이 문제를 해결하기위해 이중배열을 사용하여 처리하였습니다.
class Solution { public int solution(int n, int w, int num) { int maxFloor = (n - 1) / w + 1; int[][] boxes = new int[maxFloor][w]; int row = 0; int col = 0; boolean rightDirection = true; //상자 적재 방향. 1층의 경우 오른쪽으로 적층한다. int targetRow = 0; int targetCol = 0; for(int i = 1; i <= n; i++){ int floor = (i-1) / w + 1; rightDirection = floor % 2 == 1; // 오른쪽으로 w개 만큼 적재한 후, 방향을 왼쪽으로 틀어주기 위한 flag. 홀수 층은 오른쪽으로, 짝수 층은 왼쪽으로 저장할 목적. //꺼낼 상자의 위치 (기준점) if(i == num){ targetRow = row; targetCol = col; } if(rightDirection){ boxes[row][col] = i; //마지막 열일 경우 if(col == w -1){ row ++; } else { col ++; } } else { boxes[row][col] = i; if(col == 0){ row ++; } else { col --; } } } //답변정리 int answer = 0; while(targetRow < maxFloor){ //배열에 값이 있으면 (택배상자가 존재하면) if(boxes[targetRow][targetCol] != 0){ answer ++; } targetRow ++; } return answer; } }
반응형'코딩테스트' 카테고리의 다른 글
[프로그래머스] 가장 많이 받은 선물 자바 (0) 2025.03.27 [프로그래머스] [PCCE 기출문제] 10번 / 공원 (0) 2025.03.26 [프로그래머스] [PCCE 기출문제] 9번 / 지폐 접기 자바 (0) 2025.03.25 [프로그래머스] 동영상재생기 자바 (0) 2025.03.25 [프로그래머스] 유연근무제 자바 (0) 2025.03.24