이 영역을 누르면 첫 페이지로 이동
포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

페이지 맨 위로 올라가기

포렌식 & 개발 이야기 - Forensics & Development

Pental - Forensics / iOS / Windows / Android / Kakaotalk / Telegram / Etc

프로그래머스 - 택배 상자 꺼내기 (파이썬)

  • 2025.03.26 04:54
  • Programming/프로그래머스
글 작성자: pental

https://school.programmers.co.kr/learn/courses/30/lessons/389478?language=python3

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

풀이

다른 사람 풀이를 보고 한숨을 쉬었던 문제이다..

def solution(n, w, num):
    m1 = num%(w*2)
    m2 = ((w*2+1) - m1)%(w*2)
    # num 이상 n 이하의 수들 중 2*w로 나눈 나머지가 m1,m2인 것들의 수를 세면 된다.
    return len(range(num,n+1,w*2)) + len(range(num + (m2-m1)%(w*2), n+1, w*2))

상상도 못해본 풀이이다.

array = [[] for i in range((n // w) + 1)]

일단 나는 이차원 배열을 n // w + 1 만큼 만들어 택배가 쌓아질수 있는 총 높이 만큼 만들었다.

row = 0
current_w = 0
for i in range(1, n + 1) :
    array[row].append(i)
    current_w += 1
    if current_w >= w :
        row += 1
        current_w = 0

그리고 각각 택배상자들을 지그재그로 놓기 전에, 왼쪽에서 오른쪽으로 모두 옮기는 작업을 진행하였다.

이거 말고도 다른게 하는 방법이 있을텐데 새벽에 대충 푼거라 머리가 잘 안돌아 간다.

if len(array) > 1 and len(array[-1]) != len(array[-2]):
        for i in range(len(array[-2]) - len(array[-1])):
            array[-1].append("X")

그리고 지그재그로 쌓다보면 아마 빈 공간이 반대로 되있는 경우도 존재 할 것이다. 아래 상황처럼.

이걸 방지하기 위해서 X라는 임의의 택배 상자를 집어 넣었다.

for i in range(len(array)) :
        if i % 2 == 1 :
            array[i].reverse()

무식하게 두번째 줄의 배수는 reverse 해서 택배 위치 맞춰주기

	[[1, 2, 3, 4, 5, 6], [12, 11, 10, 9, 8, 7], [13, 14, 15, 16, 17, 18], ['X', 'X', 22, 21, 20, 19]]

지금까지는 이렇게 택배 상자를 모두 놓을 수 있었다.

box_row = 0
box_col = 0
for i in range(len(array)) :
    for j in range(len(array[0])):
        if array[i][j] == num :
            box_row, box_col = i, j
            break
print(box_row, box_col)

찾아야 하는 택배 상자의 위치를 찾고,

for index, value in enumerate(array) :
  if index >= box_row :
      if array[index][box_col] != "X" :
          answer.append(array[index][box_col])

택배 상자의 위치에서 위로 있는 택배들만 answer에 집어넣으면 끝

코드

def solution(n, w, num):
    answer = []
    array = [[] for i in range((n // w) + 1)]
    
    row = 0
    current_w = 0
    for i in range(1, n + 1) :
        array[row].append(i)
        current_w += 1
        if current_w >= w :
            row += 1
            current_w = 0
            
    if len(array) > 1 and len(array[-1]) != len(array[-2]):
        for i in range(len(array[-2]) - len(array[-1])):
            array[-1].append("X")

    for i in range(len(array)) :
        if i % 2 == 1 :
            array[i].reverse()
    print(array)
    box_row = 0
    box_col = 0
    for i in range(len(array)) :
        for j in range(len(array[0])):
            if array[i][j] == num :
                box_row, box_col = i, j
                break
    print(box_row, box_col)
    for index, value in enumerate(array) :
        if index >= box_row :
            if array[index][box_col] != "X" :
                answer.append(array[index][box_col])

    return len(answer)
저작자표시 비영리 (새창열림)

'Programming > 프로그래머스' 카테고리의 다른 글

프로그래머스 - 배달 (파이썬)  (0) 2025.03.30
프로그래머스 - 마법의 엘리베이터 (파이썬)  (0) 2025.03.29
[프로그래머스] 달리기 경주  (2) 2025.03.24
[프로그래머스/JAVA] 프로그래머스 문제 모음  (0) 2021.11.02
[프로그래머스] 행렬의 합  (0) 2020.10.12

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 프로그래머스 - 배달 (파이썬)

    프로그래머스 - 배달 (파이썬)

    2025.03.30
  • 프로그래머스 - 마법의 엘리베이터 (파이썬)

    프로그래머스 - 마법의 엘리베이터 (파이썬)

    2025.03.29
  • [프로그래머스] 달리기 경주

    [프로그래머스] 달리기 경주

    2025.03.24
  • [프로그래머스/JAVA] 프로그래머스 문제 모음

    [프로그래머스/JAVA] 프로그래머스 문제 모음

    2021.11.02
다른 글 더 둘러보기

정보

포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

  • 포렌식 & 개발 이야기 - Forensics & Development의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

카테고리

  • Category (446) N
    • Forensics (104)
      • Magnet AXIOM (28)
      • Digital Forensics Informati.. (9)
      • Iphone Forensics (23)
      • DFC (7)
      • 디지털포렌식전문가2급 자격증 (10)
      • FTK ACE 자격증 (7)
    • 이것저것 (7)
      • Ubuntu (6)
      • 디스코드 봇 (4)
      • Volatility GUI (2)
    • CTF (32)
      • NEWSECU (14)
      • CTF-d (5)
      • Puzzel - Network Forensics (2)
      • Security Traps (2)
      • system32.kr (5)
      • HMCTF (4)
    • Programming (255) N
      • C (10)
      • Python (11)
      • 백준 (201) N
      • 프로그래머스 (32)
    • 그냥 개발 및 잡담 (16)
      • Docker (2)
      • Google Cloud (3)
      • OS 개발 (3)
    • Best of Best (20)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 디지털포렌식
  • 파이썬
  • 백준
  • 프로그래머스
  • axiom
  • Forensics
  • pental
  • 포렌식
  • 전체 보기…

정보

pental의 포렌식 & 개발 이야기 - Forensics & Development

포렌식 & 개발 이야기 - Forensics & Development

pental

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © pental.

티스토리툴바