https://school.programmers.co.kr/learn/courses/30/lessons/389478
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
1. 문제 설명
- 변수
- n : 전체 택배 상자의 갯수
- w : 가로로 놓는 상자의 갯수
- num : 꺼내려는 상자의 번호
- 결과
num 위치의 상자를 꺼내기 위해, 위에 상자를 꺼내야 하는 상자의 총개수
- 주의사항
- 지그재그로 상자를 쌓음
- 꺼내야 하는 상자도 포함
2. 문제 풀이
- 꺼내려는 상자의 행 index를 계산한다 (전체 개수[num]-1)/가로로 나누는 개수[w]
public int solution(int n, int w, int num) {
int answer = 0; // 꺼내려는 상자의 갯수
int row = (num-1)/w; // 꺼내려는 상자의 행 계산
int wIdx = w-1; // 가로 인덱스
int col = 0; // 꺼내려는 상자의 열
- 짝수행 (0,2,4 ...)이라면 전체index에 열 index를 나눠서,
홀수행(1,3,5 ...)이라면 열인덱스에 그걸 빼서 계산한다.
if (row%2 == 0) { // 짝수 행(그대로)
col = (num-1) % w;
} else { // 홀수 행(반대로)
col = wIdx - (num-1) % w;
}
- 현재 박스를 포함해서 열[row]를 올리며 위의 상자index를 계산한다.
전체 상자의 갯수 안에 그 index가 있으면 결과에 넣는다.
// 현재 박스 포함, 위에 있는 상자의 번호 계산
for (; row < (n+wIdx)/w; row++) { // 정수 나눗셈에서 올림 (n+w-1)/w
int aboveBox = 0; // 위에 있는 박스의 열
if (row % 2 == 0) { // 짝수 행(그대로)
aboveBox = col + (row * w);
} else { // 홀수 행(반대로)
aboveBox = (wIdx - col) + (row * w);
}
// 전체 상자 갯수안에 있다면 +
if (aboveBox < n) {
answer++;
}
}
- 전체 코드
class Solution {
public int solution(int n, int w, int num) {
int answer = 0; // 꺼내려는 상자의 갯수
int row = (num-1)/w; // 꺼내려는 상자의 행 계산
int wIdx = w-1; // 가로 인덱스
int col = 0; // 꺼내려는 상자의 열
if (row%2 == 0) { // 짝수 행(그대로)
col = (num-1) % w;
} else { // 홀수 행(반대로)
col = wIdx - (num-1) % w;
}
// 현재 박스 포함, 위에 있는 상자의 번호 계산
for (; row < (n+wIdx)/w; row++) { // 정수 나눗셈에서 올림 (n+w-1)/w
int aboveBox = 0; // 위에 있는 박스의 열
if (row % 2 == 0) { // 짝수 행(그대로)
aboveBox = col + (row * w);
} else { // 홀수 행(반대로)
aboveBox = (wIdx - col) + (row * w);
}
// 전체 상자 갯수안에 있다면 +
if (aboveBox < n) {
answer++;
}
}
return answer;
}
}
- 깔끔히 정리
난 3항 연산자를 좋아하는 편인데 이로 코드를 보기 좋게 만들 수 있다.
class Solution {
public int solution(int n, int w, int num) {
int answer = 0;
int row = (num - 1) / w;
int col = (row % 2 == 0) ? (num - 1) % w : (w - 1 - (num - 1) % w);
for (; row < (n + w - 1) / w; row++) {
int aboveBox = (row % 2 == 0) ? col + row * w : (w - 1 - col) + row * w;
if (aboveBox < n) answer++;
}
return answer;
}
}
'코딩 알고리즘 스터디' 카테고리의 다른 글
프로그래머스 LV.4 / 언어별 개발자 분류하기 (SQL) (0) | 2025.03.17 |
---|---|
프로그래머스 DP / N으로 표현 (Python) (0) | 2025.03.17 |
프로그래머스 [PCCP 기출문제] 1번 / 동영상 재생기 (0) | 2025.02.16 |
프로그래머스 [PCCE 기출문제] 10번 / 데이터 분석 (0) | 2025.02.16 |
프로그래머스 Lv.1 대충 만든 자판도움말 - Java (1) | 2025.01.12 |