Contents
https://school.programmers.co.kr/learn/courses/30/lessons/389478
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제

설명
택배기사님이 택배 상자를 좌우로 와리가리치면서 상자를 아래서부터 위로 쌓으신다
n개의 택배상자를 놓아야 하는데 w만큼 쭉 놓으시고
꺾어서 다시 쭉 쌓고를 반복
다 쌓고 나서 누가 num번째 상자를 빼달라 하면
위에 놓인 상자를 치우고 주신다
이때 상단의 상자를 몇개 치워야 하는지 반환(num번째 상자 포함)
- 2차원 배열에 정수 담기
- num 정수의 위치 찾기
- num의 위로 몇개의 정수가 있는지 확인하고 반환
이런식으로 생각을 하고 풀어보았다!!
풀이
/*
* 프로그래머스 택배 상자 꺼내기
* 1 ~ n의 정수를 배열에 담음
* 단 w만큼 놓고 돌리고 또 w만큼 놓고 돌리고 하며 배열에 담는다
* 다 놓고 담고 나서 num을 꺼내기 위해 위의 정수를 치워야 한다
* 몇 개를 치워야하는지 반환(num 포함)
*/
class Solution {
public int solution(int n, int w, int num) {
int[][] arr = new int[n / w + 1][w];
// 2차원 배열에 담기
int turn = 1;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
// 짝수번째 줄은 반대로 담기
if (i % 2 == 0) {
arr[i][j] = turn;
} else {
arr[i][w - j - 1] = turn;
}
turn++;
// 2중 포문 탈출
if (turn > n) {
break;
}
}
if (turn > n) {
break;
}
}
int cnt = 0;
int loc = -100;
// 디폴트값 0이 들어가기 때문에 0은 배제해야 함
// num의 위치 검색
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
// 위치 지정
if (arr[i][j] == num) {
loc = j;
}
// 그 위치면 카운트
if (j == loc && arr[i][j] != 0) {
cnt++;
}
}
}
return cnt;
}
}
단순히 생각한 기능을 구현에만 집중하고 풀어보았다
배열에 정수를 담는 과정에서
짝수번째 줄은 조건절 내의 [w - j - 1]로 넣어주었다
num 위치를 지정해주고 이 위치를 지나면 카운트되게 했다
/*
* 프로그래머스 택배 상자 꺼내기
* 1 ~ n의 정수를 배열에 담음
* 단 w만큼 놓고 돌리고 또 w만큼 놓고 돌리고 하며 배열에 담는다
* 다 놓고 담고 나서 num을 꺼내기 위해 위의 정수를 치워야 한다
* 몇 개를 치워야하는지 반환(num 포함)
*/
class Solution {
public int solution(int n, int w, int num) {
int[][] arr = new int[n / w + 1][w];
// 2차원 배열에 정수 담기
int turn = 1;
// 카운트, num의 위치
int cnt = 0;
int loc = -100;
// 디폴트값 0이 들어가기 때문에 0은 배제해야 함
// num의 위치 검색
// 2중 for문 탈출법
outer: for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
// 짝수번째 줄은 반대로 담기
int col = (i % 2 == 0) ? j : (w - j - 1);
arr[i][col] = turn;
// num의 위치 지정
if (turn == num) {
loc = col;
}
// 거치면 카운트
if (col == loc) {
cnt++;
}
turn++;
// 2중 포문 탈출
if (turn > n) {
break outer;
}
}
}
return cnt;
}
}
2중 for문을 두번씩이나 쓰는 것이 꼴뵈기 싫어서 하나로 합쳤다
원리는 같다
시간은 비슷하게 걸리고 메모리는 더쓴다;;
Algo/프로그래머스/1/389478. 택배 상자 꺼내기 at main · qTeTp/Algo
This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - qTeTp/Algo
github.com

'프로그래머스' 카테고리의 다른 글
| [프로그래머스] 정수 삼각형(JAVA) (0) | 2025.11.30 |
|---|---|
| [프로그래머스] 땅따먹기 (JAVA) (0) | 2025.11.26 |
| [프로그래머스] 프로세스 (JAVA) (1) | 2025.06.02 |
| [프로그래머스] 완주하지 못한 선수 (JAVA) (0) | 2025.05.30 |
| [프로그래머스] 타겟 넘버 (JAVA) (0) | 2025.02.17 |