요구사항
창고의 택배 상자들은 왼쪽에서 오른쪽 그 다음 층은 오른쪽에서 왼쪽 으로 번갈아가면서 1번부터 차례대로 쌓여 있고
상자를 꺼내기 위해서는 그 상자 위에 있는 모든 상자를 꺼내야 꺼낼수 있다.
특정 상자를 꺼내려고 할때 총 몇개의 상자를 꺼내야 하는지 구하기
입력 값
int n | 창고에 쌓여있는 택배 상자 총 개수 |
int w | 가로로 놓을 수 있는 상자의 개수 |
int num | 꺼내려는 상자의 번호 |
풀이
1. 박스 위치 구하기
-> 박스가 위치한 높이(층) = (박스번호 - 1) / 가로개수 + 1
-> 박스가 위치한 가로위치 (1~w) =
박스가 홀수 층 이면? (박스번호 - 1) % 가로개수 + 1
박스가 짝수 층 이면? 박스높이 * 가로개수 - 박스번호 + 1
2. 꺼내야 하는 박스의 위에 있는 박스 번호 구하기
-> 위에 있는 박스가 홀수 층이면? 박스 가로위치 * 2 -1
위에 있는 박스가 짝수 층이면? 가로개수 * 2 - 박스 가로위치 * 2 -1
-> 꺼내야하는 박스 갯수 + 1 처리
3. 2에서 구한 박스가 최대 박스 번호보다 커질 때까지 2 반복하여 위에 있는 박스 구하기
4. 꺼내야하는 박스 갯수 return
728x90
Java 코드
class Solution {
public int solution(int n, int w, int num) {
int answer = 0;
// 꺼내야 하는 박스 위치
int pickH = ((num-1)/w) + 1;
int pickW = (pickH%2 == 1) ? (num-1)%w+1 : pickH*w-num+1;
int now = num;
int pickCnt = 0;
while(now <= n) {
pickCnt++;
if((pickH + pickCnt)%2 == 0) now += w*2 - (pickW*2 - 1);
else now += pickW*2 - 1;
}
answer = pickCnt;
return answer;
}
}
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/389478
728x90
반응형
'코딩테스트 > 코드챌린지' 카테고리의 다른 글
[2025 프로그래머스 코드챌린지 2차 예선] 완전범죄 (Java) (2) | 2025.02.26 |
---|---|
[2025 프로그래머스 코드챌린지 2차 예선] 서버 증설 횟수 (Java) (2) | 2025.02.19 |
[2025 프로그래머스 코드챌린지 1차 예선] 지게차와 크레인(Java) (2) | 2025.02.18 |
[2025 프로그래머스 코드챌린지 1차 예선] 비밀 코드 해독 (Java) (1) | 2025.02.18 |
[2025 프로그래머스 코드챌린지 1차 예선] 유연근무제 (Java) (1) | 2025.02.18 |