이번 문제는 풀기 전에 미리 구상하는 것이 중요하다는 걸 다시 느끼게 해줬다.
막무가내로 풀었으면 조건문을 많이 쓸 수도 있었을 텐데 미리 로직을 짜고 코딩을 시작하니 간단하게 풀 수 있었다.
class Solution {
public int solution(int n, int w, int num) {
//배열과 같은 인덱스로 맞추기 위해 -1씩 해준다.
num--;
n--;
// row는 행, col은 열을 의미함. 아래 세줄은 꺼내야하는 상자의 행과 열을 구함.
int row = num/w;
int loc = num%w;
int col = row%2 == 1 ? w-loc-1 : loc;
// 아래 세줄은 마지막 상자의 행과 열을 구함.
int lastRow = n/w;
int lastLoc = n%w;
int lastCol = lastRow%2 == 1 ? w-lastLoc-1 : lastLoc;
// 마지막 행은 고려하지 않고 확정으로 꺼내야하는 박스의 수를 구함.
int boxes = lastRow - row;
//마지막상자의 열과 꺼내야하는상자의 열이 같으면 무조건 한 개 더 꺼내야함.
if(col == lastCol) {
boxes++;
} else {
//꺼내야하는상자와 마지막상자의 위치를 비교하고 마지막열은 왼쪽부터 채워지는지 오른쪽부터 채워지는지 계산함.
int isLeft = col < lastCol ? 1 : 0;
int fillLeft = lastRow%2 == 1 ? 0 : 1;
//둘 다 왼쪽이면 박스가 하나 더 쌓일테고 오른쪽도 마찬가지임.
if(isLeft == 1 && fillLeft == 1) boxes++;
if(isLeft == 0 && fillLeft == 0) boxes++;
}
return boxes;
}
}'프로그래머스 1단계' 카테고리의 다른 글
| 프로그래머스 [이웃한 칸] (0) | 2026.03.02 |
|---|---|
| 프로그래머스 [붕대 감기] (0) | 2026.03.01 |
| 프로그래머스 [동영상 재생기] (0) | 2026.02.28 |
| 프로그래머스 코테 연습 [유연근무제] (0) | 2026.02.27 |