250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- java
- 코테
- 2025 프로그래머스 코드챌린지 2차 예선
- 티스토리챌린지
- javascript
- 파이어베이스
- 자바
- project
- firebase
- 태그
- React Native
- expo
- 오블완
- map
- 리액트네이티브
- 프로젝트
- 자바스크립트
- PCCE
- 프로그래머스
- 스프링
- Spring
- 리액트
- controller
- React
- 코딩테스트
- 리액트 네이티브
- 코딩
- 백엔드
- ReactNative
- node.js
Archives
- Today
- Total
양갱의 개발 블로그
[프로그래머스] [2025 프로그래머스 코드챌린지 2차 예선] 택배 상자 꺼내기(Java) 본문
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/389478
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
상자를 쌓는 방법은 너비에서 오른쪽 위, 왼쪽 위로 지그재그방향으로 상자를 쌓습니다.
위 사진에서 찾으려는 상자와 상자 위에 있는 상자들의 개수를 return
확인 내용
더보기
// 초기에 생각한 방법(실패)
// 찾는 상자의 위치 (x,y)
// x는 w보다 작음, y는 n/w의 값보다 같거나 작음
// num을 w로 나누었을 때
// 몫이 홀수인 경우, 나머지 값은 w의 뒤에서 -
// 짝수인 경우, 나머지 값은 w의 앞에서 +
// 같은 x에서 찾으려는 숫자의 위에 있는 상자들의 개수 = 답
// 모든 박스를 쌓았을 때만 확인하면 됨
초기 코드(테스트 케이스 실패)
import java.util.Arrays;
class Solution {
public int solution(int n, int w, int num) {
int answer = 0;
if(w == 1) return n-num+1;
int x = num / w;
int bufy = num % w;
int y = 0;
if(x%2 == 1) {
bufy = num%w;
y = w-bufy;
} else {
y = bufy;
}
if(bufy == 0) x-=1; // w의 배수인 경우는 -1
System.out.println(x + "," + y + "," +bufy);
answer = n/w - x - 1;
int quotient = n / w; // 몫
int remainder = n % w; // 나머지
if(quotient % 2 == 1){
if(w - remainder < y) answer += 1;
}else{
if(w - remainder > y) answer += 1;
}
if (remainder == 0) answer -= 1; // 배수인 경우도 있음.
// 해당 박스까지 포함
answer+=1;
System.out.println(answer);
return answer;
}
}
진짜 오랜만에 코딩해서 머리가 안 돌아가나봅니다.. 그냥 냅다 이런 박스 위에 있는 값만 찾게 했는데 테스트 케이스에서 점수가 엉망입니다
다시
for문으로 돌렸을 때 거꾸로 넣는건 어떻게 해야 하나 고민을 했었는데 바보같았습니다..ㅎ..ㅎ
최종 코드
import java.util.Arrays;
class Solution {
public int solution(int n, int w, int num) {
int answer = 0;
// 이중 배열에 데이터를 넣어줌
// 이중 배열에 높이 계산 : 배수이면 높이만큼, 나머지가 있으면 +1
// 왼쪽에서 시작할지 말지 확인하는 boolean 값 -> 반대라면 더해서 빼기/더하기 진행
// 거꾸로 넣어주는 방식 : for문으로 x 인덱스를 증가 시켰기 때문에 다시 감소하는 방식으로 넣어주면 됨.
int heightbox = n/w;
if (n%w != 0) heightbox++;
int x = 0;
int y = 0;
int numx=0;
int numy=0;
boolean reverse = false;
int[][] box = new int[heightbox][w];
System.out.println(x + "," + y + "," +heightbox);
// 박스 채우기
for (int i=1; i<=n; i++){
box[y][x] = i;
if(i==num){
numx=x;
numy=y;
}
if (reverse){ // 오른쪽부터 시작한 경우 뒤에서 넣어줘야 함
if(x==0){
reverse = false;
y++;
}else {
x--;
}
} else {
if(x == w-1) {
reverse=true;
y++;
}else {
x++;
}
}
}
// 꺼내야 하는 박스 개수 찾기
// x는 고정하고 박스와 박스 위에 있는 박스들만 알면 됩니다.
System.out.println(numx + "," + numy );
while(numy<heightbox){
if (box[numy][numx] != 0){
answer++;
}
numy++;
}
return answer;
}
}
이거보다 더 간단하게 6줄로 간단하게 끝내시는 분들도 계십니다
실력이 많이 부족함을 느끼고 꼭꼭 꾸준히 고민해보는 습관을 들어야 겠습니다
힌트 참고
728x90
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [2025 프로그래머스 코드챌린지 2차 예선] 서버 증설 횟수(Java) (0) | 2025.03.27 |
---|---|
[프로그래머스] [2025 프로그래머스 코드챌린지 2차 예선] 유연근무제(Java) (0) | 2025.03.27 |
[프로그래머스] [PCCE 기출문제] 9번 / 이웃한 칸 (Java) (0) | 2024.11.16 |
[프로그래머스] [PCCE 기출문제] 10번 / 공원(Java), (feat.90점) (0) | 2024.11.14 |
[프로그래머스] [PCCE 기출문제] 9번 / 지폐 접기(Java) (0) | 2024.11.12 |