CodingTest
[프로그래머스] 택배 상자 꺼내기
신뇽이되고싶은미뇽
2025. 3. 3. 13:51
728x90
내 코드
class Solution {
public int solution(int n, int w, int num) {
int answer = 0;
int cnt = 1;
int rr = 0;
int dd = 0;
// 행의 개수를 정확하게 계산
int rows = (n % w == 0) ? (n / w) : (n / w) + 1;
int [][]arr = new int[rows][w];
//n: 택배 상자의 개수를 나타내는 정수
//w: 가로로 놓는 상자의 개수
for(int i = 0; i < rows; i++){
if(i % 2 == 1){ //홀수 층일 때
for(int j = w - 1; j >= 0; j--){
arr[i][j] = cnt;
if(cnt == n){
break;
}
else if(cnt == num){
rr = i;
dd = j;
}
cnt++;
}
}else{//짝수 층이라면?
for(int j = 0; j < w; j++){
arr[i][j] = cnt;
if(cnt == n){
break;
}
else if(cnt == num){
rr = i;
dd = j;
}
cnt++;
}
}
}
for(int k = rows -1 ; k >= rr; k--){
if(arr[k][dd]!=0){
answer++;
}
}
return answer;
}
}
놓친 점
1.
층 수를 계산할 때
n%w가 0이 되면 배열이 끝까지 다 찾다는 소리이고
아니라면 n/w한 것에다가 1을 더해줘야한다.
근데 나는 후자만 생각을 했었다.
그래서 테스트 코드 몇 가지만 통과하는 결과를 얻게 되었다.
2.
arr배열에 cnt를 넣기 전에 cnt가 num이랑 같다면 break를 하라는 if문을 넣어버려서
arr에 cnt가 num일 경우에 값을 넣지 못하는 불상사가 발생했다.
이 두가지를 해결해주니 통과 완료!
https://school.programmers.co.kr/learn/courses/30/lessons/389478
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
728x90