프로그래머스 [2025 프로그래머스 코드챌린지 2차 예선] / 택배상자 꺼내기 - java

2025. 2. 24. 08:22·코딩 알고리즘 스터디

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
'코딩 알고리즘 스터디' 카테고리의 다른 글
  • 프로그래머스 LV.4 / 언어별 개발자 분류하기 (SQL)
  • 프로그래머스 DP / N으로 표현 (Python)
  • 프로그래머스 [PCCP 기출문제] 1번 / 동영상 재생기
  • 프로그래머스 [PCCE 기출문제] 10번 / 데이터 분석
Rabet
Rabet
  • 블로그 메뉴

    • 관리자
    • 글쓰기
  • Rabet
    卯
    Rabet
  • 전체
    오늘
    어제
    • Root (139)
      • QA (1)
        • 오류사항 (1)
      • KT AIVLE School (0)
        • Start (4)
        • Python프로그래밍 & 라이브러리 (6)
        • 데이터 처리 및 분석 (7)
        • 데이터 분석 및 의미 찾기 (7)
        • 웹크롤링 (10)
        • 머신러닝 (10)
        • 딥러닝 (6)
        • 시각지능 딥러닝 (10)
        • 언어지능 딥러닝 (6)
        • JAVA (4)
        • SQL (2)
        • 가상화 클라우드 (5)
        • 프로젝트 (8)
      • 웹공부 (14)
        • SPRING (11)
        • React (1)
      • 코딩 알고리즘 스터디 (23)
      • 코딩테스트 (9)
        • JAVA (8)
        • HTML (1)
      • CS공부 (3)
      • 자격증공부 (3)
        • 정보처리기사 (1)
        • 컴퓨터활용능력 1급 (1)
        • AICE Associate (1)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
Rabet
프로그래머스 [2025 프로그래머스 코드챌린지 2차 예선] / 택배상자 꺼내기 - java
상단으로

티스토리툴바